我使用<<变量执行了一个简单的位操作以在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)
请帮我找出错误
文字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)