Je suis très nouveau pour traiter les bits et ont obtenu collé sur l'avertissement suivant lors de la compilation:avertissement: nombre de décalage à gauche> = largeur du type
7: warning: left shift count >= width of type
Ma ligne 7 ressemble à ceci
unsigned long int x = 1 << 32;
Cela serait logique si la taille de long
sur mon système était 32 bits. Cependant, sizeof(long)
renvoie 8
et CHAR_BIT
est défini comme 8
, ce qui suggère que long devrait être 8x8 = 64 bits de long.
Qu'est-ce que je manque ici? Est-ce que sizeof
et CHAR_BIT
sont inexacts ou ai-je mal compris quelque chose de fondamental?
Est-ce que 'unsigned long x = 1; x << = 32; 'travail, par intérêt? –
@Kolink: Oui, cela aurait le même effet, comme le ferait '(unsigned long) 1 << 32' L'opérande de gauche doit simplement être un' unsigned long'. Le suffixe 'UL' est juste le moyen le plus simple d'accomplir cela. –
@ James McNellis: Quels sont les problèmes de __left__ * déplaçant un entier signé *? Je sais seulement que *** right *** déplacer un entier signé peut conduire à un résultat différent avec des compilateurs différents. – pynexj