Bonjour,
J'ai déjà posé cette question précédemment, mais les réponse que j'ai eues étaient floues.
Je pose donc à nouveau cette question car je suis dans une situation où la comprendre me serait d'une grande utilité.
J'ai de la difficulté à comprendre un passage du K&R, la voici:
Pourquoi, reprenant l'exemple de ce passage, sur une machine ayant des int codés sur 16 bits et des long sur 32, -1L < 1U, et pourquoi -1L > 1UL ?Conversion rules are more complicated when unsigned operands are involved. The problem
is that comparisons between signed and unsigned values are machine-dependent, because they
depend on the sizes of the various integer types. For example, suppose that int is 16 bits and
long is 32 bits. Then -1L < 1U, because 1U, which is an unsigned int, is promoted to a
signed long. But -1L > 1UL because -1L is promoted to unsigned long and thus appears
to be a large positive number.
De plus, j'ai de la misère à comprendre pourquoi ils font ces comparaisons (-1L < 1U et -1L > 1UL)... Dans le cas de -1L < 1U, je sais bien que -1 est plus petit que 1, peu importe le type. Par contre, je ne comprends pas pourquoi -1 peut-être plus grand que 1. J'en déduis que ce doit être au niveau de la représentation binaire, avec le complément de deux et le bit de signe...
Si vous pouviez m'expliquer cela en détails, en expliquant les étapes respectives de votre raisonnement, ce serait fort apprécié...
Je vous remercie,
Sincèrement,
Array
Partager