[英]Why unsigned int right shift is always filled with '1'
#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;
您將看到類似(默認情況下您似乎已將char簽名)的信息:
shift2bin: 11111111111111111111111110000000
^^^^^^^^
如果對shift3bin
執行相同shift3bin
,則會看到:
shift3bin: 01111111111111111111111111000000
^^^^^^^^
因此,您可以看到看起來如何獲得“ 1”填充。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.