打印数字的二进制表示

时间:2015-09-09 19:50:01

标签: c++ bits

以下代码打印数字的二进制表示有什么问题?

int a = 65;
for (int i = 0; i < 8; i++) {
    cout << ((a >> i) & 1);
}

2 个答案:

答案 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