Je vais entrer dans les différences au niveau matériel, sur x86. Cela n'est généralement pas pertinent, sauf si vous écrivez un compilateur ou utilisez un langage d'assemblage. Mais c'est bon à savoir.
Premièrement, x86 a un support natif pour la représentation du complément à deux des nombres signés. Vous pouvez utiliser d'autres représentations, mais cela nécessiterait plus d'instructions et serait généralement une perte de temps processeur.
Qu'est-ce que j'entends par «support natif»? Fondamentalement, je veux dire qu'il existe un ensemble d'instructions que vous utilisez pour les numéros non signés et un autre ensemble que vous utilisez pour les numéros signés. Les numéros non signés peuvent se trouver dans les mêmes registres que les numéros signés, et en effet, vous pouvez mélanger des instructions signées et non signées sans inquiéter le processeur. C'est au compilateur (ou au programmeur d'assemblage) de savoir si un numéro est signé ou non et d'utiliser les instructions appropriées.
Premièrement, les nombres complémentaires à deux ont la propriété que l'addition et la soustraction sont les mêmes que pour les nombres non signés. Peu importe que les chiffres soient positifs ou négatifs. (Donc, vous allez de l'avant et ADD
et SUB
vos numéros sans souci.)
Les différences commencent à apparaître lorsqu'il s'agit de comparaisons. x86 a un moyen simple de les différencier: au-dessus / en dessous indique une comparaison non signée et supérieur / inférieur à indique une comparaison signée. (Par exemple, JAE
signifie "Saut si supérieur ou égal" et n'est pas signé.)
Il existe également deux ensembles d'instructions de multiplication et de division pour traiter les entiers signés et non signés.
Enfin: si vous voulez vérifier, par exemple, un débordement, vous le feriez différemment pour les numéros signés et non signés.