c语言的一点有关问题
c语言的一点问题
这个代码的结果是不是就是1或者0?
#include <stdio.h>
void main ()
{
printf("0 & 0 is %d\n", 0 & 0);
printf("0 & 1 is %d\n", 0 & 1);
printf("1 & 1 is %d\n", 1 & 1);
printf("1 & 2 is %d\n", 1 & 2);
printf("15 & 127 is %d\n", 15 & 127);
}
但是测试结果却是这样的
0&0 is 0
0&1 is 0
1&1 is 1
1&2 is 0
15&127 is 15
前面的还看的懂 但是到了第四个就感觉不是我语气那个了 (我用的是linux里gcc编译的)
------解决方案--------------------
按位与 只要有一个为0 则为0 2个都为1才得1
1&2 = 1&10 = 0
15&127 = 1111&1111111 = 1111 = 15
------解决方案--------------------
2进制按位于
01
10
--
00
------解决方案--------------------
这个代码的结果是不是就是1或者0?
#include <stdio.h>
void main ()
{
printf("0 & 0 is %d\n", 0 & 0);
printf("0 & 1 is %d\n", 0 & 1);
printf("1 & 1 is %d\n", 1 & 1);
printf("1 & 2 is %d\n", 1 & 2);
printf("15 & 127 is %d\n", 15 & 127);
}
但是测试结果却是这样的
0&0 is 0
0&1 is 0
1&1 is 1
1&2 is 0
15&127 is 15
前面的还看的懂 但是到了第四个就感觉不是我语气那个了 (我用的是linux里gcc编译的)
------解决方案--------------------
按位与 只要有一个为0 则为0 2个都为1才得1
1&2 = 1&10 = 0
15&127 = 1111&1111111 = 1111 = 15
------解决方案--------------------
2进制按位于
01
10
--
00
------解决方案--------------------
- C/C++ code
&是按位与: printf("1 & 2 is %d\n", 1 & 2); 1 : 0x00000001 2 : 0x00000010 & 0x00000000 ==>0 printf("15 & 127 is %d\n", 15 & 127); 15: 0x00001111 127: 0x11111111 & 0x00001111 ==>15
------解决方案--------------------
只看后八位
0000 0001&0000 0010=0000 0000
0000 1111&0111 1111=0000 1111
位运算,结合内存存储
------解决方案--------------------
位运算是以位为单位的,因此你要以二进制位的角度来看,把数字转换为这样来看就很清楚了:
00000001 & 00000010 = 00000000 ( 0)
00001111 & 11111111 = 00001111 (15)