c语言的位移

时间:2014-06-20 05:44:07

标签: c bit-shift

我试过了:

#include<stdio.h>

main()
{
    int a=10000;
    unsigned char cp1=0,cp2=0,cp3=0,cp4=0;

    cp1 = (a & 0xff000000) >> 24;
    cp2 = (a & 0x00ff0000) >> 16;
    cp3 = (a & 0x0000ff00) >>  8;
    cp4 = (a & 0x000000ff)      ;

    printf("%d %d %d %d\n",cp1,cp2,cp3,cp4);
}

我的输出是:

0 0 39 16

我找到了(39<<8) + 16=10000

我无法理解cp3=(a & 0x0000ff00)>>8; ==39它是如何工作的?

我知道0xff=255,我想知道(&)操作和0xff如何协同工作并采取特定的位。

你能告诉我它是如何工作的吗?

1 个答案:

答案 0 :(得分:2)

             a  = 0010 0111 0001 0000
        0xff00  = 1111 1111 0000 0000
   (a & 0xff00) = 0010 0111 0000 0000
(a & 0xff00)>>8 = 0000 0000 0010 0111  //shift the bits of above ANDing 8 times to right
0000 0000 0010 0111 = 39 in decimal