簡體   English   中英

右移操作>>移位符號位和何時不移位?

[英]When right shift operation >> shift sign bit and when it not?

我的問題是為什么a>>1移位符號位,但不是(a & 0xaaaaaaaa) >> 1

代碼段

int a = 0xaaaaaaaa;
std::cout << sizeof(a) << std::endl;
getBits(a);
std::cout << sizeof(a>>1) << std::endl;
getBits(a >> 1);
std::cout << sizeof(a & 0xaaaaaaaa) << std::endl;
getBits(a & 0xaaaaaaaa);
std::cout << sizeof((a & 0xaaaaaaaa)>>1) << std::endl;
getBits((a & 0xaaaaaaaa) >> 1);

結果

4
10101010101010101010101010101010
4
11010101010101010101010101010101
4
10101010101010101010101010101010
4
01010101010101010101010101010101

a >> 1很無聊。 它只是針對負數asigned類型定義的實現。

(a & 0xaaaaaaaa) >> 1更有趣。 對於你有32位int (以及其他)的可能情況, 0xaaaaaaaa是一個unsigned文字(十六進制文字的模糊規則)。 因此,由於C ++類型提升規則a被轉換為unsigned類型,因此表達式a & 0xaaaaaaaa的類型是unsigned

為酒吧測驗提出了一個很好的問題。

參考: http//en.cppreference.com/w/cpp/language/integer_literal ,特別是“文字的類型”表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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