我不明白为什么3& 0x1111 =1?看来:
对于任何没有符号的32位整数i,i& 0x1111应该是i,对吗?
然而,当我在ubuntu14.04上尝试这个时,我得到了3 & 0x1111=1。为什么?
int main() {
unsigned int a =3;
printf("size of a= %lu\n",sizeof(a));
printf("value of 3 & 0x1111= %d\n",a & 0x1111);
return 0;
} 发布于 2015-08-27 16:30:22
将两者转换为二进制:
0x1111 = 0001 0001 0001 0001
3 = 0000 0000 0000 0011当您一点一点地&它们时,您还期望什么?
发布于 2015-08-27 16:31:22
在C中,以0x开头的任何数字文字都是十六进制数。所以您使用的位掩码是十六进制中的1111。在掩码中,#0、#4、#8和#12是1s,其余的是0s,这就是为什么要获得1。
0x1111 = 0000 0000 0000 0000 0001 0001 0001 0001 in binary
3 = 0000 0000 0000 0000 0000 0000 0000 0011 in binary
------------------------------------------------
1 = 0000 0000 0000 0000 0000 0000 0000 0001 after doing biwise AND如果您想要使用所有1s以十六进制构造一个掩码,则应该是
0xffffffff = 1111 1111 1111 1111 1111 1111 1111 1111发布于 2015-08-27 16:31:33
3d = 3h = 11b
1111小时=000100010001b
因此:
0001000100010001b
& 11b
-------------------
1bhttps://stackoverflow.com/questions/32254866
复制相似问题