这里有一段代码:
#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?如果加了两个无符号字符变量,应该会溢出,结果应该是3,然后将从unsigned char 3转换为int 3。
这里有一段代码:
#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?如果加了两个无符号字符变量,应该会溢出,结果应该是3,然后将从unsigned char 3转换为int 3。
整数运算从不在比 int
小的数据类型上执行。例如,对于小于int
类型的类型,例如如果两个类型char
和short int
相加,则在执行任何算术操作之前将它们提升为int
,结果是一个整数类型。如果其中一个类型比int大,例如long long int
和int
,则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可转换为无符号int类型的rvalue。