#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;
}
|
|