A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

5 个回复

倒序浏览
我用CB编译器没有出现问题,可能编译器不同的原因吧,一切以苹果的为主吧
回复 使用道具 举报
看晕了............
回复 使用道具 举报
晕了。。。。。。
回复 使用道具 举报
你b&n得到的是最高位为1或0,其他位为0,这个数不是1或者0,这个数是1000000000或者0000000000,也就是要么是有符号int的最大值要么是0,你拿这个数跟1判断是不是相等当然是不正确的。你保留的是最高位不是最低位
回复 使用道具 举报
poxiao 发表于 2015-11-18 21:23
你b&n得到的是最高位为1或0,其他位为0,这个数不是1或者0,这个数是1000000000或者0000000000,也就是要么 ...

谢谢,我知道我错哪了。半天没迷过来。{:2_32:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马