簡體   English   中英

添加兩個unsigned char變量,結果為int

[英]Adding two unsigned char variables and result is int

有代碼:

#include <iostream>
int main(){
  unsigned char a = 4, b = 255;
  int g = (unsigned char)a + (unsigned char)b;
  std::cout << g << std::endl;
  return 0;
}

結果:

259

為什么結果是259而不是3? 如果添加了兩個unsigned char變量,則應該有溢出,結果應為3,然后它應該從unsigned char 3轉換為int 3。

加法操作將首先推動其操作數int在做加法之前。 這就是C的工作原理。 如果要截斷,則需要將其分配回更窄的類型,例如unsigned char

從不對小於int數據類型執行整數算術。 例如,對於小於int類型,例如,如果添加了兩個類型charshort int ,則在任何算術運算之前將它們提升為int ,結果為整數類型。 如果其中一個類型碰巧大於int,例如long long intint則int被提升為long long int ,結果為long long int

(§4.5/ 1) - 如果int可以表示源類型的所有值,則可以將char,signed char,unsigned char,short int或unsigned short int類型的rvalue轉換為int類型的rvalue。 否則,源rvalue可以轉換為unsigned int類型的rvalue。

暫無
暫無

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

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