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

标签 c bit-manipulation

我不明白为什么 3 & 0x1111 = 1 ?似乎是:

for any unsigned 32-bit integer i, i & 0x1111 should be i, right?

但是当我在 ubuntu 14.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;
} 

最佳答案

将它们都转换成二进制:

0x1111 = 0001 0001 0001 0001
3      = 0000 0000 0000 0011

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

关于c - 为什么 (3 & 0x1111) = 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32254866/

相关文章:

c - 结构体中文件路径字段的长度

c - `clang -ansi` 扩展名

C - 错误冲突类型。定义了函数原型(prototype)

python - Python 中的位运算

c - 如何将 MSB 复制到字节的其余部分?

c - 使用自定义颜色绘制而无需使用 Xlib 进行分配

c - 在 Linux 中修改 ext2 文件结构

c - C 4byte float ieee754中没有运算符的乘法和除法

c++ - C++ 中 64 位整数的按位 (Bitshift) 运算

将 "if between"与按位运算符而不是逻辑运算符进行比较