在c ++中移动二进制数

时间:2016-09-20 17:09:20

标签: c++

#include <iostream>    

int main()
{
    using namespace std;

    int number, result;

    cout << "Enter a number: ";
    cin >> number;
    result = number << 1;
    cout << "Result after bitshifting: " << result << endl; 
}

如果用户输入12,程序会输出24

在二进制表示中,120b1100。但是,程序打印的结果是十进制24,而不是80b1000)。

为什么会这样?我怎样才能得到结果?

1 个答案:

答案 0 :(得分:0)

为什么程序输出24

你是对的,12在其二进制表示中是0b1100。话虽如此,如果你愿意,它也是0b001100。在这种情况下,向左移位会为您提供0b011000,即24。该程序产生例外结果。

这会停止在哪里?

您正在使用int变量。当以32位为目标时,其大小通常为4个字节(32位)。但是,依靠int的大小是一个坏主意。需要特定尺寸变量时,请使用stdint.h

对已签名类型的位移提示警告

在负值上使用<< bitshift运算符是未定义的行为。 >>对负值的行为是实现定义的。在您的情况下,我建议您使用unsigned int(或仅unsigned相同),因为int已签名。

如何获得您的结果?

如果知道用户输入的数字的大小(以位为单位),则可以使用&(按位AND)运算符使用位掩码。 e.g。

result = (number << 1) & 0b1111; // 0xF would also do the same