我尝试使用下面的代码输出数字115的二进制表示,但显示的结果不正确。
我期待0000 0000 0111 0011但显示0000 0000 0111 1111.
似乎在确定应该显示1后,它将显示全部。
void Bits::displayShort(short input)
{
cout << endl;
sMask = 1000000000000000;
for (int count = 0; count < 16; count++)
{
if ((input & sMask) == 0)
{
cout << "0";
}
else
{
cout << "1";
}
if (count == 3 || count == 7 || count == 11) { cout << " "; }
sMask = sMask >> 1;
}
cout << endl << endl;
}
答案 0 :(得分:4)
您从以下开始:
sMask = 1000000000000000;
这不是2的力量。你应该从短的最大位开始,这是:
sMask = 0x8000;
或者我们可以使用一个不易出错的表达式:
sMask = 1 << 15;
sMask = 1 << (sizeof(input)*8 - 1);
或者在C ++ 14中,我们有二进制文字,这可能是你想要的:
sMask = 0b1000000000000000;
答案 1 :(得分:1)
你有几个错误。
sMask
的初始值 - 它必须为(1 << (8*sizeof(short)-1))
。
short sMask = (1 << (8*sizeof(short)-1));
您需要更改循环中input
的值,而不是sMask
的值。
而不是
sMask = sMask >> 1;
你需要
input = input << 1;
您可以将其缩短为:
input <<= 1;