comment manipuler les bits en c (test ou ecrit)

comment manipuler les bits en c (test ou ecrit) - C - Programmation

Marsh Posté le 02-03-2009 à 11:56:00    

bjr,je veux savoir s'il ya une autre maniere de tester un bit que celleci: if(((tab[ret] << (j-1)) & BIT)!=BIT)
je la untilise ici:  
                     ...
                   

Code :
  1. unsigned short int BIT=32768;/*BIT==1000000000000000*/
  2.                      ...     
  3.                      int j=B->info.sk;
  4.                      ret=j/16; j=j % 16;
  5.                      if (j==0){ret--;j=16;}
  6.                      if(((tab[ret] << (j-1)) & BIT)!=BIT)
  7.                      {p=empiler(p,B->g);}


merci je bien vouloir maider
aurevoir

Message cité 1 fois
Message édité par zack_chips le 02-03-2009 à 12:01:48
Reply

Marsh Posté le 02-03-2009 à 11:56:00   

Reply

Marsh Posté le 02-03-2009 à 14:19:17    

J'aurais eu tendance a ecrire

Code :
  1. ((tab[ret] >> (15-j)) & 0x01) != 0x01


mais le principe est le meme.  Et il vaut mieux que tab soit des unsigned.
 
(En passant, << par -1 comem tu le fait quand le j initial est un multiple de 16 me semble bizarre).

Reply

Marsh Posté le 02-03-2009 à 20:23:03    

le mieux pour la lisibilité du code est d'utiliser une fonction( inline en c99 si on veut de la performance ou sous forme de macro en C89)

 
Code :
  1. int is_bit_set(int value,int bit_pos)
  2. {
  3.    return value & (1<<bit_pos);
  4. }
  5. [...]
  6. if (is_bit_set(a,i))
  7. {
  8. /*bit set*/
  9. }
  10. else
  11. {
  12. /*bit not set*/
  13. }


Message édité par sligor le 02-03-2009 à 20:23:24
Reply

Marsh Posté le 05-03-2009 à 09:41:09    

zack_chips a écrit :

bjr,je veux savoir s'il ya une autre maniere de tester un bit que celleci: if(((tab[ret] << (j-1)) & BIT)!=BIT)
je la untilise ici:  
                     ...
                   

Code :
  1. unsigned short int BIT=32768;/*BIT==1000000000000000*/
  2.                      ...     
  3.                      int j=B->info.sk;
  4.                      ret=j/16; j=j % 16;
  5.                      if (j==0){ret--;j=16;}
  6.                      if(((tab[ret] << (j-1)) & BIT)!=BIT)
  7.                      {p=empiler(p,B->g);}


merci je bien vouloir maider
aurevoir


On peut cacher la misère avec des macros
 
http://mapage.noos.fr/emdel/bits.htm
 
http://mapage.noos.fr/emdel/clib.htm
Module BITS


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed