[英]Internal temporal variable in mathematic calculation in C++
以下示例用于说明我的问题:
#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 ++如何处理这种情况。
但是,signed char变量(temp + temp + temp + temp)的总和将大于signed char的范围。
这无关紧要,因为integral promotion
会将char
提升为int
。 细节可以在这里找到。 因此,操作将在int
类型上完成,您将获得预期的结果。
没有任何事情发生,因为整体推广
小整数类型(例如char)的Prvalues可以转换为更大整数类型(例如int)的prvalues。 特别是,算术运算符不接受小于int的类型作为参数,并且在左值到右值转换后自动应用整数促销(如果适用)。 此转换始终保留该值。
(temp+temp+temp+temp)
将返回一个整数。
(temp+temp+temp+temp)/t
将在char范围内。
所以p == temp
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.