検索

ホームページ  >  に質問  >  本文

Linux 上の C 言語での典型的な面接の質問

GCC コンパイラを使用して Linux 上で次のプログラムを実行すると、出力結果はどうなりますか?

リーリー

これには型変換、データの切り捨て、埋め込みが含まれることを知っておいてください。しかし、具体的な説明がわかりませんか?

元の質問ソース: Linux 上の C 言語でのいくつかの古典的な面接の質問

过去多啦不再A梦过去多啦不再A梦2743日前1167

全員に返信(2)返信します

  • 巴扎黑

    巴扎黑2017-06-26 11:01:02

    char 的长度是 1 字节,并且,大多数的机器都将其视为有符号数的,所以它的表示范围是 [-128, 127](参见《深入理解计算机系统》P27~P28)。所以,当你给 c 赋值 127 时,你执行了 ++c の場合、1 バイトしかないため、オーバーフローが発生します。

    はマシンでは127を表します。2進数に変換すると、この01111111,可以看到,当你加 1 之后,结果就变成了 10000000,由于在计算机内部,负数是用补码来表示的,所以就变成了 -128。之后再 ++cのようになり、-127になります。

    異なる種類であっても、メモリの一部であるコンピューター内ではすべて同じように動作します。したがって、タイプは制限ではありません。

    返事
    0
  • 天蓬老师

    天蓬老师2017-06-26 11:01:02

    この質問は言語ではなく 编译器 をテストします。
    3 つの変数を定義します:

    リーリー

    C言語ではcが計算に参加する場合、cをs_cに変換するかu_cに変換するかは编译器によって決まります。

    gcc は c を符号付きとみなし、後続の計算と出力は符号付き数値として処理します。

    返事
    0
  • キャンセル返事