如何打印负数的二进制值?

时间:2015-06-22 11:39:55

标签: c++ bit-manipulation

我一直试图找到负数的二进制表示。据我所知,负数被存储为计算机中的2的补码。并且,MSB为1,表示它是负数。

所以,我有以下代码来打印任何数字的二进制表示::

void printBits(int n) {
    if((n >> 1) == 0) {
        cout << (n & 1);
        return;
    }
    printBits(n >> 1);
    cout << (n & 1);
}

但是,它对于负数而言是失败的,可能是因为在左移位时,符号位不会改变,但会被移位。 那么,我如何打印二进制表示。

有一个函数bitset,它打印出这样的表示:

bitset<numberOfBitsRequired>(numberToBeRepresented)

我尝试在ideone上使用它,这可能是一个64位编译器。 因此,如果在numberOfBitsRequired中,我将输入设为64,我会得到此输出::

1111111111111111111111111111111111111111111111111111111111111111

但是,如果我将numberOfBitsRequired更改为65,我会得到::

01111111111111111111111111111111111111111111111111111111111111111

从开始的零开始,我可以理解已超过的位数。有没有办法可以找到编译器的配置?我稍后可以在我的代码中使用它来查找位表示。

感谢您提前提供任何帮助。

0 个答案:

没有答案