PDA

Afficher la version complète : [c] Bit shift



lucienmathieu
06/10/2004, 21h03
Un message de bzorg m'a donne l'idee de parler des operateurs binaires, surtout des bit shift...

Les operateurs << et >>, sont assez simple a comprendre, il deplace les bits a gauche pour l'operateur << et a droite pour l'operateur >>

a << n deplacera les bits de a vers la gauche de n bits, tant dis que b >> n deplacera les bits de b vers la droite de n bits.

2 << 16, me donnera 131072, qui est en fait 2^17, si on prend 2, c'est 2^1, on ajoute 16 a l'exposant et ca fait 2^17.

8 >> 2, vous l'aurez devinez 8 c'est 2^3, 2^(3-2) c'est 2^1 qui vaut 2 ;-P

bzorg avait dans son version.h les lignes suivantes:
#define LINUX_VERSION_CODE 132608
#define KERNEL_VERSION(a,b,c) (((a) << 16) + (( b ) << 8) + ( c ))

le calcul devient pour un KERNEL_VERSION(2,4,0)
2 = 2^1 => 2 << 16 devient 2^17
4 = 2^2 => 2 << 8 devient 2^10
2^17 (131072) + 2^10 (1024) + 0 = 132096

le calcul devient pour un KERNEL_VERSION(2,6,0)
2 = 2^1 => 2 << 16 devient 2^17
6 = 2^2 + 2^1 (et 4 + 2) => 6 << 8 devient 2^10 + 2^9
2^17 (131072) + 2^10 (1024) + 2^9 (512) + 0 = 132608

c'est de l'algebre de bool, mais je pense que mon explication ne devait pas faire l'introduction de l'algebre de bool...[lm01]

bzorg
07/10/2004, 15h51
c'est vu http://www.alionet.org/style_emoticons/<#EMO_DIR#>/thumbsup.gif

lucienmathieu
12/10/2004, 20h14
Si tu as besoin d'autre chose, n'hesite pas ;-P