在纯ansi C中,有没有办法证明,给定
char c1 = 1, c2 = 2;
以下类型:
c1 + c2
是int?
感谢。
注意:我知道它符合标准,但在C ++中你可以使用typeid运算符来显示它。我希望能够显示c1 + c2
是C中的int。
答案 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上的事实不是更多吗?
所以c1
和c2
是左值。只有c1 + c2
的结果是右值。
因此,应该对char执行添加,从而导致溢出,从而导致1
。
但之后,包含值char
的{{1}}类型的右值将被提升到1
,保留其值(在C ++中)。因此int
会看到cout
并相应地输出。
如果给int
一个字符,它应该输出ASCII值为cout
的字符,这是一个不可打印的字符。