1

純粋な ansi C では、それを示す方法はありますか?

char c1 = 1, c2 = 2;

次のタイプ:

c1 + c2

はintですか?

ありがとう。

注: 標準によればそうであることはわかっていますが、C++ では typeid 演算子を使用して表示できます。c1 + c2Cのintであることを示したいと思います。

4

5 に答える 5

2

そのようなことを証明することはできません。ACコンパイラは、観察可能な結果が抽象マシンの場合と同じであるという条件で、すべての操作を好みに合わせて置き換えることができます。アディションの結果(右辺値)に直接アクセスできないため、そのタイプは観察できず、サイズ、幅、または符号もわかりません。

于 2011-07-29T15:59:44.313 に答える
0

c1 = 255でx2が255の場合、追加するとti 510が追加されます。これは、charには大きすぎますが、intには問題ありません。

int x = c1 + c2;

于 2011-07-29T15:54:55.907 に答える
0

整数の昇格が右辺値で行われるという事実ではありませんか?

c1c2は左辺値です。の結果のみがc1 + c2右辺値です。

したがって、加算は char で実行する必要があり、それによってオーバーフローが発生し、1.

ただし、その後、値をchar含む型の右辺値は、その値を保持1するように昇格されintます (C++ の場合)。そのため、それに応じて出力coutが表示されます。int

coutchar が与えられた場合1、印刷できない文字である ASCII 値を持つ文字を出力する必要があります。

于 2013-04-03T08:27:56.440 に答える
0

私はこれがc ++であることを知っていますが、フォーマット指定子を必要とするprintfとは異なり、型を決定するため、coutを使用したかった(つまり、結果を変更します)

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 に答える