Et mon bit de signe ? - C++ - Programmation
Marsh Posté le 03-11-2002 à 19:14:12
Hmm, je viens de faire un test :
int x = -1;
x<<=14;
printf("x = %d\n", x);
int y = 1;
y<<=14;
printf("y = %d\n", y);
getchar();
Et... le bit de signe est conservé du début à la fin : x est négatif et y positif !
...je ne comprends pas
Si quelqu'un peut m'expliquer, il est le bienvenu !
Marsh Posté le 04-11-2002 à 01:09:12
un décallage à gauche conserve le signe.
en ASM x86, les instructions SAL (décalage arithmétique gauche) et SHL (décalage gauche) sont les mêmes, seules les décalages à droite implique réellement une version prenant en compte le signe et une non. (SAR et SHR).
Marsh Posté le 04-11-2002 à 01:14:17
pour un char: dec à gauche de 1
1 => 0000 0001 << 0000 0010 : 2
3 => 0000 0011 (1+2) << 0000 0110 : 6 (4+2)
-1 => 1111 1111 << 1111 1110 : -2
-3 => 1111 1101 << 1111 1010 : -6
décaller à gauche ne fait pas perdre le signe...
Marsh Posté le 04-11-2002 à 23:59:48
Même l'incidence d'un décalage sur la valeur arithmétique n'est pas défini, puisque la représentation binaire interne n'est pas imposée.
Comment ça se passe sur intel...
Type signé décalé à droite: Le bit de signe est dupliqué/propagé.
Les autres cas: Tous les bits sont décalés, des 0 sont introduits.
A cause de cette particularité, j'ai voulu créer un "sign_cast<signed>(n)", mais j'y arrive pas.
leneuf22 a écrit a écrit : Et... le bit de signe est conservé du début à la fin : x est négatif et y positif ! ...je ne comprends pas |
Tes int font probablement 32 bits. Tu as donc écrasé un 1 avec un 1, et un 0 avec un 0.
Essaie ça:
Code :
|
bjone a écrit a écrit : un décallage à gauche conserve le signe. |
Ben justement non...
Marsh Posté le 05-11-2002 à 01:58:53
Un décalage a gauche, c'est une multiplication par deux. Tant que x*2 rentre dans un entier, le décalage a gauche conserve le signe. Si x*2 ne rentre pas dans un entier, bah ca rentre pas quoi
Marsh Posté le 02-11-2002 à 22:44:09
Hello
Lors d'un décalage de bits vers la gauche (sur une variable int par exemple), le bit de signe est-il conservé ?
J'espère que oui, mais ça me semble quand même illogique, il devrait se retrouver à la benne, non ?
Merci de votre aide.