2011-09-24 183 views
10

有代码:增加两个无符号字符变量,结果为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?如果添加了两个无符号字符变量,应该有溢出,结果应该是3,然后将其应无符号的字符转换3到int 3

回答

14

加法运算将第一promote其操作数int,在做加法之前。这就是C的工作原理。如果要截断,则需要将其重新分配为较窄的类型,例如unsigned char

6

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

(第4.5/1) - 型炭的右边的值,符号的字符,无符号的字符,短 int或无符号短 INT可以转换为int类型的右值如果INT可以表示 所有源类型的值;否则,源rvalue可以被 转换为类型为unsigned int的右值。

相关问题