添加两个unsigned char变量,结果为int

时间:2011-09-24 10:32:29

标签: c++

有代码:

#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.

2 个答案:

答案 0 :(得分:14)

在添加操作之前,添加操作将首先promote其操作数添加到int。这就是C的工作原理。如果要截断,则需要将其分配回更窄的类型,例如unsigned char

答案 1 :(得分:7)

从不对小于int的数据类型执行整数运算。例如,对于小于int的类型,例如如果添加了两个类型charshort int,则在任何算术运算之前将它们提升为int,结果为整数类型。如果其中一个类型恰好大于int,例如long long intint,那么int将被提升为long long int,结果为long long int

  

(§4.5/ 1) - char类型的rvalue,signed char,unsigned char,short   int或unsigned short       如果int可以表示,int可以转换为int类型的rvalue   源类型的所有值;否则,源rvalue可以   转换为unsigned int类型的右值。