#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
。
在二进制表示中,12
为0b1100
。但是,程序打印的结果是十进制24
,而不是8
(0b1000
)。
为什么会这样?我怎样才能得到结果?
答案 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