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