GCC コンパイラを使用して Linux 上で次のプログラムを実行すると、出力結果はどうなりますか?
リーリーこれには型変換、データの切り捨て、埋め込みが含まれることを知っておいてください。しかし、具体的な説明がわかりませんか?
元の質問ソース: Linux 上の C 言語でのいくつかの古典的な面接の質問
巴扎黑2017-06-26 11:01:02
char
的长度是 1 字节,并且,大多数的机器都将其视为有符号数的,所以它的表示范围是 [-128, 127]
(参见《深入理解计算机系统》P27~P28)。所以,当你给 c
赋值 127 时,你执行了 ++c
の場合、1 バイトしかないため、オーバーフローが発生します。
はマシンでは127を表します。2進数に変換すると、この01111111
,可以看到,当你加 1 之后,结果就变成了 10000000
,由于在计算机内部,负数是用补码来表示的,所以就变成了 -128。之后再 ++c
のようになり、-127になります。
異なる種類であっても、メモリの一部であるコンピューター内ではすべて同じように動作します。したがって、タイプは制限ではありません。
天蓬老师2017-06-26 11:01:02
この質問は言語ではなく 编译器
をテストします。
3 つの変数を定義します:
C言語ではcが計算に参加する場合、cをs_cに変換するかu_cに変換するかは编译器
によって決まります。
gcc は c を符号付きとみなし、後続の計算と出力は符号付き数値として処理します。