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.