Prenons par exemple les deux variables de 1 octet suivantes :
uint8_t x1 = 0x00;
uint8_t x2 = 0xFF;
Lors de l'impression du complément binaire, le résultat est une variable de 4 octets :
printf("%02X -> %02X; %02X -> %02X\n", x1, ~x1, x2, ~x2);
00 -> FFFFFFFF; FF -> FFFFFF00
Je sais que cela peut être "résolu" en utilisant le moulage ou le masquage :
printf("%02X -> %02X; %02X -> %02X\n", x1, (uint8_t) ~x1, x2, (uint8_t) ~x2);
00 -> FF; FF -> 00
printf("%02X -> %02X; %02X -> %02X\n", x1, ~x1&0xFF, x2, ~x2&0xFF);
00 -> FF; FF -> 00
Mais pourquoi ce comportement non intuitif en premier lieu ?