我试过了:
#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
如何协同工作并采取特定的位。
你能告诉我它是如何工作的吗?
答案 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