数据 C++ 的二进制表示显示的数据不正确

Incorrect data shown for binary representation of data C++

我正在尝试使用以下代码输出数字 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;
}

您开始于:

sMask = 1000000000000000;

这不是 2 的幂。您应该从短的最大位开始,即:

sMask = 0x8000;

或者我们可以使用一个不太容易出错的表达式:

sMask = 1 << 15;
sMask = 1 << (sizeof(input)*8 - 1);

或者在 C++14 中,我们有二进制文字,这可能是您想要的:

sMask = 0b1000000000000000;

你有几个错误。

  1. sMask 的初始值 -- 它需要是 (1 << (8*sizeof(short)-1)).

    short sMask = (1 << (8*sizeof(short)-1));
    
  2. 你需要在循环中改变input的值,而不是sMask的值。

    而不是

    sMask = sMask >> 1;
    

    你需要

    input = input << 1;
    

    您可以将其缩短为:

    input <<= 1;