#include <iostream>
#include <string>
#include <bitset>
int main()
{
char c = 128;
unsigned int shift2 = (unsigned int)c;
std::string shift2bin = std::bitset<8>(shift2).to_string(); //to binary
std::cout << " shift2bin: " << shift2bin << std::endl;
unsigned int shift3 = shift2 >> 1;
std::string shift3bin = std::bitset<8>(shift3).to_string(); //to binary
std::cout << " shift3bin: " << shift3bin << std::endl;
}
输出:
shift2bin: 10000000
shift3bin: 11000000
我希望结果如下:
shift2bin: 10000000
shift3bin: 01000000
问题&GT;为什么unsigned int right shift使用1作为填充符?
答案 0 :(得分:3)
如in this answer所示,无符号右移始终为零填充。但是,请尝试打印出unsigned int
中的所有位:
std::string shift2bin = std::bitset<sizeof(shift2)*8>(shift2).to_string(); //to binary
std::cout << " shift2bin: " << shift2bin << std::endl;
你会看到类似的东西(因为你似乎默认签名了):
shift2bin: 11111111111111111111111110000000
^^^^^^^^
如果您对shift3bin
执行相同操作,则会看到:
shift3bin: 01111111111111111111111111000000
^^^^^^^^
所以,你可以看到你看起来如何得到“1”填充。