有没有办法证明整数推广到int?

时间:2011-07-29 15:47:45

标签: c integer char integer-promotion

在纯ansi C中,有没有办法证明,给定

char c1 = 1, c2 = 2;

以下类型:

c1 + c2

是int?

感谢。

注意:我知道它符合标准,但在C ++中你可以使用typeid运算符来显示它。我希望能够显示c1 + c2是C中的int。

5 个答案:

答案 0 :(得分:2)

你无法证明这样的事情。如果可观察的结果与抽象机器中的相同,则允许C编译器将所有操作替换为其喜好。您无法直接访问adition的结果(作为右值),因此它的类型不可观察,也不是它的大小,宽度或符号。

答案 1 :(得分:0)

如果c1 = 255且x2是255,那么当添加它们时,它们将添加ti 510,这对于char来说太大了但是对于int来说是好的。

int x = c1 + c2;

答案 2 :(得分:0)

我知道这是c ++,但我想使用cout,因为它确定的类型不像printf,它需要格式说明符(即会改变你的结果)

char c1=156, c2=101;
cout << c2 + c1 << endl;

输出 1 它溢出,范围只有0到255,结论:它不是int而是char

答案 3 :(得分:0)

如何使用sizeof()进行检查。没自己检查一下。只是一个想法。

答案 4 :(得分:0)

整合促销是否会发生在rvalues上的事实不是更多吗?

所以c1c2是左值。只有c1 + c2的结果是右值。

因此,应该对char执行添加,从而导致溢出,从而导致1

但之后,包含值char的{​​{1}}类型的右值将被提升到1,保留其值(在C ++中)。因此int会看到cout并相应地输出。

如果给int一个字符,它应该输出ASCII值为cout的字符,这是一个不可打印的字符。

相关问题