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
------解决方案--------------------
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)