以下示例用于说明我的问题:
#include <iostream>
#include <string>
int main()
{
signed char p;
signed char temp=100;
signed char t=4;
p = (temp+temp+temp+temp)/t;
std::cout << "Hello, " << int(p)<< "!\n";
}
在上面的代码中,变量p
被定义为四个singed char
变量的平均值。但是,signed char变量(temp + temp + temp + temp)的总和将大于signed char的范围。所以我的问题是C ++如何处理这种情况。
答案 0 :(得分:7)
但是,signed char变量(temp + temp + temp + temp)的总和将大于signed char的范围。
由于char
int
将被提升为integral promotion
,因此无关紧要。可以找到详细信息here。因此,操作将在int
类型上完成,您将获得预期的结果。
答案 1 :(得分:5)
小积分类型(例如char)的Prvalues可以转换为 较大整数类型的prvalues(例如int)。特别是, 算术运算符不接受小于int的类型 参数和积分促销会在之后自动应用 如果适用,左值到右值的转换。总是这种转换 保留价值。
(temp+temp+temp+temp)
将返回一个整数。
(temp+temp+temp+temp)/t
将在char范围内。
所以p == temp