web-dev-qa-db-fra.com

Quelle est la différence entre binaire signé et non signé

J'ai lu quelques sites, mais aucun d'eux n'a de sens pour moi. Les binaires signés et non signés sont les mêmes que les variables signées et non signées. Je serais heureux si vous pouviez aider :)

4
R.M.R

L'indicateur "signé" signifie que l'élément peut contenir des valeurs positives ou négatives. "Unsigned" ne fait pas la distinction entre les valeurs positives et négatives. Une variable signée/non signée peut faire référence à n'importe quel type de données numérique (tel que binaire, entier, flottant, etc.). Chaque type de données peut être défini ultérieurement comme signée ou non signée.

Par exemple, un binaire signé de 8 bits peut contenir des valeurs de 0 à 127, tant positives que négatives (1 bit est utilisé pour le signe et 7 bits pour la valeur), tandis qu'un binaire non signé de 8 bits peut contenir des valeurs de 0 à 255 (rien ne permet de savoir si la valeur doit être considérée comme positive ou négative, bien qu’elle soit communément supposée positive).

Un binaire signé est un type de données spécifique d'une variable signée.

J'espère que cela pourra aider!

5
Joel Stanford

Une variable "signée" signifie que la valeur conserve une valeur positive ou négative en utilisant le bit le plus significatif (le dernier bit à gauche), appelé "bit signé". Une variable "non signée" ne le fait pas, mais le bit le plus significatif est simplement la puissance suivante de deux.

Nous appelons un bit signé qui est 1 un nombre négatif alors que sur un nombre non signé, le bit serait soumis aux règles des bits binaires habituels.

Par exemple, les valeurs maximales ressemblent à ceci: 
Caractère non signé 0b11111111 (0xFF en hex) = 255 en décimal, (128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255)
Caractère signé 0b11111111 (0xFF en hex) = -127 en décimal, (-1 * (64 + 32 + 16 + 8 + 4 + 2 + 1) = - 127)

En plus de ce que vous pourriez voir dans le code: 
Caractère non signé 0b10000001 (0x81 en hex) = 129 en décimal, (128 + 1 = 129) 
Caractère signé 0b10000001 (0x81 en hex) = -1 en décimal, (-1 * 1) 

(Remarque: le caractère est un octet, ce qui signifie qu'il a huit chiffres en binaire pouvant être modifiés)
(Pour tous ceux qui se demandent, 0b signifie que le bit est en binaire et 0x signifie qu'il est en hexadécimal)

1
Kenneth

Binaire signé et non signé fait référence à la conversion qui dépend du signe du binaire représenté. Tandis que pour les variables, cela signifie que la variable est capable de stocker ou non la valeur négative.

En binaire pour le bit signé: Nous disons que 1 est négatif et que 0 est positif. Donc, si vous voyez le deuxième exemple, le premier bit est 1 signifie? - C'est vrai, c'est négatif. Et nous ne l’incluons pas pour la conversion base2 en base10.

Par exemple: 1001 Dans le bit non signé (ne vous souciez pas du signe): 9

Par exemple: 1001 Dans le bit signé (le bit de poids fort est un bit de signe): -1

Pour les variables, il est très probable que stocke des nombres négatifs.

MSB: bit le plus significatif

0
Smit

Cela dépend de la position ou de la situation . Exemple, dans Assembly, nous voulons charger des octets ayant la valeur: 0xFF (~ 11111111 en binaire) depuis la mémoire. $ s3 a l'adresse de cette valeur.

  • avec func lbu (load byte unsignal), il permet uniquement de charger des signaux non signalés: lb rt, offset (rs). 

    • lbu $ s0, 32 ($ s3): lbu chargera la valeur et 0-extend sur 32 bits 0x000000FF interprété comme 255.
  • avec func addi, il permet de charger le signal binaire: lb rt, ofset (rs).
    • lb $ s0, 32 ($ s3): lb va charger la valeur et 1-extend sur 32 bits 0xFFFFFFFF qui est interprété comme -1.
0
ducPham