在纯 ansi C 中,有没有办法证明,给定
char c1 = 1, c2 = 2;
以下类型:
c1 + c2
是int?
谢谢。
注意:我知道根据标准它是,但在 C++ 中,您可以使用 typeid 运算符来显示它。我希望能够显示c1 + c2
是 C 中的 int。
在纯 ansi C 中,有没有办法证明,给定
char c1 = 1, c2 = 2;
以下类型:
c1 + c2
是int?
谢谢。
注意:我知道根据标准它是,但在 C++ 中,您可以使用 typeid 运算符来显示它。我希望能够显示c1 + c2
是 C 中的 int。
你无法证明这样的事情。只要可观察到的结果与抽象机中的相同,AC 编译器就可以根据自己的喜好替换所有操作。您无法直接访问加法的结果(作为右值),因此它的类型是不可观察的,它的大小、宽度或符号也是不可观察的。
如果 c1 = 255 且 x2 为 255,那么添加时它们将添加 ti 510,这对于 char 来说太大但对于 int 来说是可以的。
诠释 x= c1+c2;
我知道这是 c++,但我想使用 cout,因为它确定的类型与 printf 不同,它需要格式说明符(即会改变你的结果)
char c1=156, c2=101;
cout << c2 + c1 << endl;
输出为1溢出,范围仅为 0 到 255,结论:它不是 int 而是 char
如何使用 sizeof() 进行检查。自己没查。只是一个想法。
不是更多的事实是积分提升发生在右值上吗?
c1
左值也是如此c2
。只有 的结果c1 + c2
是右值。
所以应该在 char 上执行加法,从而导致溢出,导致1
.
但之后,char
包含值的类型的右值1
将被提升为int
保留其值(在 C++ 中)。所以cout
会看到一个int
并相应地输出。
如果cout
给定一个字符,它应该输出具有 ASCII 值的字符,该字符1
是不可打印的字符。