簡體   English   中英

為什么無符號int右移總是用'1'填充

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM