簡體   English   中英

operator <<如果結果是unsigned int或unsigned short則解釋算術運算

[英]operator << interprets arithmetic operation if the result is unsigned int or unsigned short

我在fedora 19 64bits下使用gcc 4.8.3

unsigned u1=10, u2=42;
unsigned short us1=10, us2=42;

int main() {
   cout << "u1-u2="<<u1-u2<<", us1-us2="<<us1-us2<<endl;
}

結果:u1-u2 = 4294967264,us1-us2 = -32

<<運算符似乎將第二個操作的結果解釋為帶符號的 short,而它將第一個操作的結果解釋為unsigned int

作為-和大多數其他算術運算符的操作數,任何比int窄的整數類型的值都被提升為int

所以us1 - us2表現為(int)us1 - (int)us2

這條規則在現代C ++中非常煩人,但它最早出現在C語言中(因為int大小的寄存器用於算術運算),它現在會破壞太多代碼來改變它。

暫無
暫無

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

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