读书人

c语言的一点有关问题

发布时间: 2012-08-28 12:37:01 作者: rapoo

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
[解决办法]

C/C++ code
&是按位与: printf("1 & 2 is %d\n", 1 & 2);1 : 0x000000012 : 0x00000010 &     0x00000000  ==>0printf("15 & 127 is %d\n", 15 & 127);15:  0x00001111127: 0x11111111 &     0x00001111  ==>15
[解决办法]
只看后八位

0000 0001&0000 0010=0000 0000

0000 1111&0111 1111=0000 1111

位运算,结合内存存储
[解决办法]
位运算是以位为单位的,因此你要以二进制位的角度来看,把数字转换为这样来看就很清楚了:
00000001 & 00000010 = 00000000 ( 0)
00001111 & 11111111 = 00001111 (15)

读书人网 >C语言

热点推荐