以下代码打印数字的二进制表示有什么问题?
int a = 65;
for (int i = 0; i < 8; i++) {
cout << ((a >> i) & 1);
}
答案 0 :(得分:7)
您从数字中的最低位开始并首先打印它。但是,无论您首先打印的是典型二进制表示中最重要的数字。
65是01000001
所以这就是循环迭代的方式
01000001
^ Output: 1
01000001
^ Output: 10
01000001
^ Output: 100
...
01000001
^ Output: 10000010
因此打印输出相反。最简单的解决方法是更改循环的顺序。
for (int i = 7; i >= 0; i--) {
cout << ((a >> i) & 1);
}
答案 1 :(得分:1)
C中的int通常为32位。所以这对我有用
void binary(unsigned n) {
unsigned i;
// Reverse loop
for (i = 1 << 31; i > 0; i >>= 1)
printf("%u", !!(n & i));
}
. . .
binary(65);
输出
00000000000000000000000001000001