//编写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的结果相同,但是此处得不到想要的结果。
|
|