unsigned short s; s = 0xffff; int i = s;
Comment fonctionne l’extension ici? 2 octets d’ordre plus importants sont ajoutés, mais je ne comprends pas si les 1 ou les 0 sont étendus ici. Ceci dépend probablement de la plate-forme, alors concentrons-nous sur ce que fait Unix. Est-ce que les deux plus gros octets de commande de l’int seraient remplis de 1 ou de 0 et pourquoi?
Fondamentalement, l’ordinateur sait-il que s
n’est pas signé et atsortingbue-t-il correctement les zéros aux bits d’ordre supérieur de l’int? Donc, i
maintenant 0x0000ffff
? Ou, puisque ints
est signé par défaut sous Unix, prend-il le bit signé de s
(a 1) et le copie-t-il dans les octets d’ordre supérieur?
Non, une valeur unsigned
n’est jamais étendue à un signe. La conversion ascendante complétera toujours une telle valeur avec des zéros.
Plus précisément, la variable non signée représente un nombre particulier, et elle représentera toujours le même nombre après une conversion, à condition que cela soit possible dans le nouveau format.
Hexadécimale ou non, C (bien que pas C99) et C ++ sont conçus pour fonctionner en l’absence de bits, par exemple avec des valeurs numériques en base 10.