#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
问题>为什么无符号的int右移使用1作为填充?
从这个答案中可以看出,无符号的右移总是零填充。但是,请尝试这样做以打印出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"填充。