一个简单的问题

luosha80 2002-12-28 11:39:30
#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);
}
大家看看这段简单的程序,在VC里编译出来的结果我却看不明白了。结果如下,大家帮忙看看啊。
0 & 0 is 0
0 & 1 is 0
1 & 1 is 1
1 & 2 is 0 ???
15 & 127 15 ???
就是最后两条看不明白啊,是不是VC编译产生的错误啊!!!

...全文
15 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿发伯 2002-12-29
  • 打赏
  • 举报
回复
这是算术与操作的正确结果,0&0=0;0&1=0,1&0=0;1&1=1:
1 & 2 is 0

01
&10
-----
00

15 & 127 15

00001111 //15
&11111111 //127
----------
00001111 //15
sea_lover 2002-12-29
  • 打赏
  • 举报
回复
&是位与。你先求出127的2进制的值,再求出15的二进制的值,两个二进制的值按位取反,就是你最后的结果!
1111 1111 ---------127
& 0000 1111 ---------15
_____________
0000 1111 ---------15
luosha80 2002-12-29
  • 打赏
  • 举报
回复
谢谢各位呵
boyfling 2002-12-29
  • 打赏
  • 举报
回复
1 = 0000 0001 (二进制)
& 2 = 0000 0010
-------------------------
0000 0000

15 和 127同上
efanl 2002-12-29
  • 打赏
  • 举报
回复
呵呵,要弄清楚逻辑与和按位与的区别,
你的程序如果换成用&&代替&,就是你想要的结果了,按位与&是要在二进制中进行与操作的,而不是你想象的从数值上的0与非0来进行与操作。
yatuor 2002-12-28
  • 打赏
  • 举报
回复

00001111 = 15
& 11111111 = 127
-----------
00001111 = 15
&是按位操作

luosha80 2002-12-28
  • 打赏
  • 举报
回复
我知道这个原理啊,我只是问问为什么最近两个会出现这种结果!
yatuor 2002-12-28
  • 打赏
  • 举报
回复
0 1
& 1 0
-----------
0 0
sorry
yatuor 2002-12-28
  • 打赏
  • 举报
回复
0 1
& 1 0
-----------
0 0
yatuor 2002-12-28
  • 打赏
  • 举报
回复
0 1
& 1 0
-----------
0 0

00001111
& 11111111
-----------
00001111

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧