【问题标题】:Incorrect data shown for binary representation of data C++为数据 C++ 的二进制表示显示的数据不正确
【发布时间】:2015-02-02 05:50:06
【问题描述】:

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

【问题讨论】:

    标签: c++ binary


    【解决方案1】:

    你开始:

    sMask = 1000000000000000;
    

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

    sMask = 0x8000;
    

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

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

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

    sMask = 0b1000000000000000;
    

    【讨论】:

      【解决方案2】:

      你有几个错误。

      1. sMask 的初始值 -- 必须是(1 &lt;&lt; (8*sizeof(short)-1))

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

        代替

        sMask = sMask >> 1;
        

        你需要

        input = input << 1;
        

        您可以将其缩短为:

        input <<= 1;
        

      【讨论】:

      • 它现在可以正常工作了,谢谢,但是为什么不移动掩码而不是用户输入值呢?
      • 如果您将掩码设为unsigned short 而不是short,您也可以移动掩码。
      猜你喜欢
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 2010-10-16
      • 1970-01-01
      • 2017-11-13
      • 2014-08-09
      相关资源
      最近更新 更多