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

标签 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;
}

最佳答案

您开始于:

sMask = 1000000000000000;

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

sMask = 0x8000;

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

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

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

sMask = 0b1000000000000000;

关于c++ - 数据 C++ 的二进制表示显示的数据不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28268188/

相关文章:

c++ - c/c++ - 警告 : sched_policy. h: 没有这样的文件或目录

c++ - Windows .lib 文件是否有一些等效的 GNU 二进制文件描述符 (BFD)?

mysql将varchar二进制表示字段转为二进制用bit_count做汉明距离计算

python - 使用递归找到大小为 k 的平衡代码

c++ - 寻找合适的数据结构

c++ - 将对话框过程作为方法绑定(bind)到自定义类

c# - 将 BCD 码转换为二进制码的最有效方法

binary - 仅使用 tcpdump 保存原始二进制有效负载

c - 在 C 中读取二进制文件期间检测到堆栈粉碎

c++ - 无法通过循环运行我的代码但是手动复制和粘贴工作