我一直试图找到负数的二进制表示。据我所知,负数被存储为计算机中的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
从开始的零开始,我可以理解已超过的位数。有没有办法可以找到编译器的配置?我稍后可以在我的代码中使用它来查找位表示。
感谢您提前提供任何帮助。