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

时间:2015-02-01 21:33:29

标签: c++ binary

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

2 个答案:

答案 0 :(得分:4)

您从以下开始:

sMask = 1000000000000000;

这不是2的力量。你应该从短的最大位开始,这是:

sMask = 0x8000;

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

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

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

sMask = 0b1000000000000000;

答案 1 :(得分:1)

你有几个错误。

  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;