it-swarm.com.de

Was ist der Unterschied zwischen vorzeichenbehafteten und vorzeichenlosen Binärdaten?

Ich habe ein paar Seiten gelesen, aber keine davon ist für mich sinnvoll. Ist vorzeichenbehaftet und nicht vorzeichenbehaftet wie bei vorzeichenbehafteten und vorzeichenlosen Variablen Ich würde mich freuen wenn du helfen könntest :)

4
R.M.R

Das Kennzeichen "unterschrieben" bedeutet, dass der Artikel positive oder negative Werte enthalten kann. "Vorzeichenlos" unterscheidet nicht zwischen positiven und negativen Werten. Eine vorzeichenbehaftete/unsignierte Variable kann sich auf einen beliebigen numerischen Datentyp beziehen (z. B. binär, Ganzzahl, Gleitkommazahl usw.). Jeder Datentyp kann weiter als signiert oder nicht signiert definiert werden.

Eine vorzeichenbehaftete 8-Bit-Binärdatei kann beispielsweise positive und negative Werte von 0 bis 127 enthalten (1 Bit wird für das Vorzeichen und 7 Bit für den Wert verwendet), während eine vorzeichenlose 8-Bit-Binärzahl Werte von 0 bis 12 enthalten kann. 255 (Nichts unterscheidet, ob der Wert als positiv oder negativ betrachtet werden soll oder nicht, obwohl allgemein angenommen wird, dass er positiv ist).

Eine signierte Binärdatei ist ein bestimmter Datentyp einer signierten Variablen.

Hoffentlich hilft das!

5
Joel Stanford

Eine "vorzeichenbehaftete" Variable bedeutet, dass der Wert einen positiven oder negativen Wert enthält, wobei das höchstwertige Bit (das letzte Bit nach links) verwendet wird. Dies wird als "vorzeichenbehaftetes Bit" bezeichnet. Eine "vorzeichenlose" Variable tut dies nicht, stattdessen ist das höchstwertige Bit nur die nächste Potenz von zwei.

Wir nennen ein vorzeichenbehaftetes Bit, das 1 ist, eine negative Zahl, während bei einer vorzeichenlosen Zahl das Bit unter die regulären Binärbitregeln fallen würde.

Zum Beispiel sehen maximale Werte so aus: 
Vorzeichenloses Zeichen 0b11111111 (0xFF in Hex) = 255 in Dezimalzahl (128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255)
Signiertes Zeichen 0b11111111 (0xFF in Hex) = -127 in Dezimalzahl (-1 * (64 + 32 + 16 + 8 + 4 + 2 + 1) = - 127)

Was Sie auch im Code sehen könnten: 
Vorzeichenloses Zeichen 0b10000001 (0x81 in hex) = 129 dezimal (128 + 1 = 129) 
Signiertes Zeichen 0b10000001 (0x81 in Hex) = -1 in Dezimalzahl (-1 * 1) 

(Hinweis: char ist ein Byte, dh es gibt acht binäre Ziffern, die geändert werden können.)
(Für alle, die sich fragen, bedeutet 0b, dass das Bit binär ist, und 0x bedeutet, dass es sich um ein Hexadezimalzeichen handelt.)

1
Kenneth

Signiertes und unsigniertes Binärzeichen bezieht sich auf die Konvertierung, die vom Vorzeichen des dargestellten Binärbilds abhängt. Bei den Variablen bezieht sich dies darauf, dass die Variable den negativen Wert speichern kann oder nicht.

In binär für signiertes Bit: Wir sagen, 1 ist negativ und 0 ist positiv. Wenn Sie also das zweite Beispiel sehen, bedeutet das erste Bit 1? - richtig, es ist negativ. Und für die Konvertierung base2 in base10 enthalten wir sie nicht.

Zum Beispiel: 1001 In Bit ohne Vorzeichen (kümmere dich nicht um das Vorzeichen): 9

Zum Beispiel: 1001 In signiertes Bit (MSB ist ein Vorzeichenbit): -1

Bei Variablen ist es sehr wahrscheinlich, dass negative Zahlen gespeichert werden.

MSB: Wichtigstes Bit

0
Smit

Es hängt von der Position oder Situation ab . Beispiel: In Assembly möchten wir Byte mit folgendem Wert laden: 0xFF (~ 11111111 in binär) aus dem Speicher. $ s3 hat Adresse dieses Wertes.

  • mit func lbu (load byte unsignal) können nur unsignal binary geladen werden: lb rt, offset (rs). 

    • lbu $ s0, 32 ($ s3): lbu lädt Wert und 0-extend auf 32 Bit 0x000000FF, was als 255 interpretiert wird.
  • mit func addi kann das Signal binär geladen werden: lb rt, ofset (rs).
    • lb $ s0, 32 ($ s3): lb lädt den Wert und 1-extend auf das 32-Bit-0xFFFFFFFF, das als -1 interpretiert wird.
0
ducPham