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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

//编写printBinary函数,输出整数的二进制表现形式的代码及问题
#include<stdio.h>
void printBinary(int a){
    int temp = 0;                                  //定义temp变量用于获取每一位的结果
    int count = (sizeof(int)*8)-2;       //获取不同编译环境下第一次平移的位数
   
    if (a>0) {                                     //if语句用来解决没有符号位的问题
        printf("0");
    }else{
        printf("1");
    };
    while (count>=0) {
        temp = a>>count&1;           //获取每一位的结果             <------ 此处问题
        printf("%d",temp);               //将每一位的结果打印输出
        if (count%8==0) {               //每隔八位打印一个空格
            printf(" ");
        }
        count--;                               //下一次平移的位数比当前少一
    }
    printf("\n");
   
}

int main(){
    printBinary(4);
    return 0;
}


打印结果:


上面问题处:&1的结果与 | 0的结果相同,但是此处不写temp = a>>count | 0;  
原因如下:  以十进制6为例


&1运算                                  0110
                                         0001
                                   ----------------------
                                               0
                                 得出第一位为0;


                                            0110
                                        0001
                                 -----------------------
                                            01
                                  得出第二位为1;
                                 依次类推可得出结果。


| 0运算                                    0110
                                         0000
                                   ----------------------      
                                               0
                                   第一二位没有问题,当输出第三位时出现问题
                                        0110
                                      0000
                                ------------------------
                                       011
                                  此时与0相或得出结果为11,打印输出结果出错。
               所以在写表达式时要想得出正确结果得写: temp = a>>count&1;
               虽然&1与| 0的结果相同,但是此处得不到想要的结果。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马