黑马程序员技术交流社区
标题:
一个关于if语句和&(与)运算符的小疑惑
[打印本页]
作者:
l5681065
时间:
2015-11-18 07:44
标题:
一个关于if语句和&(与)运算符的小疑惑
#include <stdio.h>
#include <stdlib.h>
/*
实现输入一个十进制数转换成一个带符号位的二进制,如果是负数输出其补码
我的思路是这样的:输入一个int类型的数n,让n的第一位先跟b与一下,判断符号位是正还是负,输出符号位
然后再让n的第二位与a,输出第二位,a再右移;
然后再让n的第三位与a,输出第三位,a再右移
......
直到a为0
那么问题来了,我用红字标出的if语句如果被注释里的语句替换之后,则代码出现错误,问原因是为什么
*/
int main(int argc, char *argv[]) {
int n,m,a,b;
a=0b01000000000000000000000000000000;
b=0b10000000000000000000000000000000;
while(1)
{
scanf("%d",&n);
if(b&n)//如果替换成if(b&n==1)或者if(b&n!=0)则代码出现错误 b&n的结果不是只有0跟1么? 为什么带入if语句就出错了呢?
{
printf("1");
}
else
{
printf("0");
}
while(a!=0)
{
if(n&a) //如果写成if(n&a!=0)或者if(n&a==1)
//则输出结果不对
{
printf("1");
}
else
{
printf("0");
}
a=a>>1;
}
printf("\n");
a=0b01000000000000000000000000000000;
}
return 0;
}
作者:
cube川
时间:
2015-11-18 20:31
我用CB编译器没有出现问题,可能编译器不同的原因吧,一切以苹果的为主吧
作者:
yufang1993
时间:
2015-11-18 21:05
看晕了............
作者:
石油小硕
时间:
2015-11-18 21:18
晕了。。。。。。
作者:
poxiao
时间:
2015-11-18 21:23
你b&n得到的是最高位为1或0,其他位为0,这个数不是1或者0,这个数是1000000000或者0000000000,也就是要么是有符号int的最大值要么是0,你拿这个数跟1判断是不是相等当然是不正确的。你保留的是最高位不是最低位
作者:
l5681065
时间:
2015-11-19 08:11
poxiao 发表于 2015-11-18 21:23
你b&n得到的是最高位为1或0,其他位为0,这个数不是1或者0,这个数是1000000000或者0000000000,也就是要么 ...
谢谢,我知道我错哪了。半天没迷过来。{:2_32:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2