118 votes

Qu'est-ce que CHAR_BIT?

De http://graphics.stanford.edu/~seander/bithacks.html :

 int v;           // we want to find the absolute value of v
unsigned int r;  // the result goes here 
int const mask = v >> sizeof(int) * CHAR_BIT - 1;

r = (v + mask) ^ mask;
Patented variation:
r = (v ^ mask) - mask;
 

Qu'est-ce que CHAR_BIT et comment l'utiliser dans les langages de programmation? c ++ ou java

267voto

AraK Points 38702

CHAR_BIT est le nombre de bits dans char . De nos jours, presque toutes les architectures utilisent 8 bits par octet, mais ce n'est pas toujours le cas. Certaines machines plus anciennes utilisaient auparavant des octets 7 bits.

2voto

R.. Points 93718

Vous devez savoir que ce code dépend du comportement défini par l'implémentation de right bitshift sur les types signés. gcc promet de toujours donner le comportement correct (extension de bit de signe) mais ISO C permet à la mise en oeuvre de remplir de zéro les bits supérieurs.

Un moyen de contourner ce problème:

 #ifdef HAVE_SIGN_EXTENDING_BITSHIFT
int const mask = v >> sizeof(int) * CHAR_BIT - 1;
#else
int const mask = -((unsigned)v >> sizeof(int) * CHAR_BIT - 1);
#endif
 

Votre Makefile ou config.h etc. peut définir HAVE_SIGN_EXTENDING_BITSHIFT au moment de la construction en fonction de votre plate-forme.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X