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