首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么(3 & 0x1111) = 1?

为什么(3 & 0x1111) = 1?
EN

Stack Overflow用户
提问于 2015-08-27 16:27:23
回答 6查看 755关注 0票数 3

我不明白为什么3& 0x1111 =1?看来:

对于任何没有符号的32位整数i,i& 0x1111应该是i,对吗?

然而,当我在ubuntu14.04上尝试这个时,我得到了3 & 0x1111=1。为什么?

代码语言:javascript
复制
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;
} 
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-08-27 16:30:22

将两者转换为二进制:

代码语言:javascript
复制
0x1111 = 0001 0001 0001 0001
3      = 0000 0000 0000 0011

当您一点一点地&它们时,您还期望什么?

票数 17
EN

Stack Overflow用户

发布于 2015-08-27 16:31:22

在C中,以0x开头的任何数字文字都是十六进制数。所以您使用的位掩码是十六进制中的1111。在掩码中,#0、#4、#8和#12是1s,其余的是0s,这就是为什么要获得1

代码语言:javascript
复制
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以十六进制构造一个掩码,则应该是

代码语言:javascript
复制
0xffffffff = 1111 1111 1111 1111 1111 1111 1111 1111
票数 7
EN

Stack Overflow用户

发布于 2015-08-27 16:31:33

3d = 3h = 11b

1111小时=000100010001b

因此:

代码语言:javascript
复制
  0001000100010001b
&               11b
-------------------
                  1b
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32254866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档