左移一个数字

1 c++ bit-manipulation

我使用<<变量执行了一个简单的位操作以在result第 32 个位置设置位..

result = result | (1<<31);

这应该给出输出为(二进制):

0000000000000000000000000000000010000000000000000000000000000000

和十进制:

2147483648

但这是输出(二进制):

1111111111111111111111111111111110000000000000000000000000000000

和十进制:

-2147483648

这是代码:

#include <bitset>
#include <iostream>
int main() {
  int64_t result = 0;
  
  result = result | (1 << 31);  
  std::bitset<64> x(result);
  std::cout << x <<std:: endl;
  std::cout << result << std:: endl;
}
Run Code Online (Sandbox Code Playgroud)

请帮我找出错误

Mik*_*CAT 8

文字1被视为int. int在您的环境中似乎是 32 位长,并且结果是符号扩展的。

int64_t在转换之前添加 cast to以计算 in int64_t

#include <bitset>
#include <iostream>
int main() {
  int64_t result = 0;
  
  result = result | (static_cast<int64_t>(1) << 31);  
  std::bitset<64> x(result);
  std::cout << x <<std:: endl;
  std::cout << result << std:: endl;
}
Run Code Online (Sandbox Code Playgroud)