Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1500 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Et mon bit de signe ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Et mon bit de signe ?

n°238710
leneuf22
Posté le 02-11-2002 à 22:44:09  profilanswer
 

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.

mood
Publicité
Posté le 02-11-2002 à 22:44:09  profilanswer
 

n°238746
spark
Luc ?
Posté le 03-11-2002 à 01:28:26  profilanswer
 

Oui, poubelle...

n°238917
leneuf22
Posté le 03-11-2002 à 19:14:12  profilanswer
 

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 !

n°238946
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 03-11-2002 à 20:05:44  profilanswer
 

ls décalages sur les types signés ne sont pas définis, cela revient à l'implémentation. a toi de tester


---------------
du bon usage de rand [C] / [C++]
n°239049
bjone
Insert booze to continue
Posté le 04-11-2002 à 01:09:12  profilanswer
 

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).
 
 

n°239050
bjone
Insert booze to continue
Posté le 04-11-2002 à 01:14:17  profilanswer
 

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...

n°239624
Musaran
Cerveaulté
Posté le 04-11-2002 à 23:59:48  profilanswer
 

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 :
  1. #include <limits.h>
  2. signed int si=1;
  3. si<<=sizeof(signed int)*CHAR_BIT-2;
  4. si<<=1;


 

bjone a écrit a écrit :

un décallage à gauche conserve le signe.


Ben justement non...


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°239644
Kristoph
Posté le 05-11-2002 à 01:58:53  profilanswer
 

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 :D

n°239645
theshockwa​ve
I work at a firm named Koslow
Posté le 05-11-2002 à 02:05:03  profilanswer
 

Ca sert à quoi les signed ? [un programmeur chez MS] :D
 
 
 
 
 
 
 
 
 
OK ... Je sors ...


---------------
last.fm

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Et mon bit de signe ?

 

Sujets relatifs
Vrai décalage >> sur type signé arbitraire ?pb cookie avec signe +
[JAVA] Applet Signé & Certificat Expiré 
Plus de sujets relatifs à : Et mon bit de signe ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR