当右侧操作数是字符变量&时,为什么“int sum = ch1 + ch2 + ch2”没有溢出。结果> 255?

时间:2013-05-16 11:25:19

标签: c casting expression integer-promotion

在这个程序中,我试图将字符变量的添加结果分配给整数变量。我已经确定添加的大小大于255。所以我希望表达式溢出在右边甚至虽然结果是362,但由于溢出,我希望在结果转换为int之后分配 106 ,而不是 362 。但奇怪的是 362 正在分配。

无论字符是有符号还是无符号,结果都是相同的。为什么没有溢出并且 362 被分配?因为在添加期间右侧没有整数且所有操作数都是字符,我不希望它们被提升为int

#include<stdio.h>

int main(void)
{

unsigned char ch1='z',ch2='x'; //Same result for signed too
int sum=ch1+ch2+ch2;
printf("%d",sum);

}

1 个答案:

答案 0 :(得分:1)

所有计算以整数精度开始最小值,因此您的语句将如下所示

int sum=(int)ch1+(int)ch2+(int)ch2;