1

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

char c1 = 1, c2 = 2;

以下类型:

c1 + c2

是int?

谢谢。

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

4

5 回答 5

2

你无法证明这样的事情。只要可观察到的结果与抽象机中的相同,AC 编译器就可以根据自己的喜好替换所有操作。您无法直接访问加法的结果(作为右值),因此它的类型是不可观察的,它的大小、宽度或符号也是不可观察的。

于 2011-07-29T15:59:44.313 回答
0

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

诠释 x= c1+c2;

于 2011-07-29T15:54:55.907 回答
0

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

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

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

于 2011-07-29T15:55:59.813 回答
0

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

于 2011-07-29T15:56:46.767 回答
0

不是更多的事实是积分提升发生在右值上吗?

c1左值也是如此c2。只有 的结果c1 + c2是右值。

所以应该在 char 上执行加法,从而导致溢出,导致1.

但之后,char包含值的类型的右值1将被提升为int保留其值(在 C++ 中)。所以cout会看到一个int并相应地输出。

如果cout给定一个字符,它应该输出具有 ASCII 值的字符,该字符1是不可打印的字符。

于 2013-04-03T08:27:56.440 回答