Linux下C語言的一道經典面試題
过去多啦不再A梦
过去多啦不再A梦 2017-06-26 10:59:02
0
2
1029

如果在Linux下使用GCC編譯器執行下列程序,輸出結果為何?

#include int main(){ char c=127; printf("%d",++c); printf("%d",++c); return 0; }

只是知道涉及到類型轉換、資料截斷填充。但不知道具體解釋?

原問題出處:Linux下C語言的幾道經典面試題

过去多啦不再A梦
过去多啦不再A梦

全部回覆 (2)
巴扎黑

char的長度是1 位元組,並且,大多數的機器都將其視為有符號數的,所以它的表示範圍是[-128, 127](參見《深入理解計算機系統》P27 ~P28)。所以,當你給c賦值 127 時,你執行了++c,那麼就會導致溢出,因為它只有一個位元組。

在機器中表示127,變成二進制是這樣的01111111,可以看到,當你加1 之後,結果就變成了10000000,由於在計算機內部,負數是用補碼來表示的,所以就變成了-128。之後再++c,就是 -127 了。

至於不同的類型,其實在電腦內部表現的都是一樣的,都是一塊記憶體。所以類型不是限制。

    Peter_Zhu

    這題考的是編譯器,而不是語言。
    定義3個變數:

    char c; // 表示一个 ascii字符 signed char s_c; //有符号 1字节 整数 unsigned char u_c; //无符号 1字节 整数

    C語言裡,c 在參與計算時, c 轉為 s_c 還是 u_c ,是由編譯器來決定的。

    gcc 認為 c 是 有符號的,後續的計算 和 輸出 都是以有符號數來處理。

      最新下載
      更多>
      網站特效
      網站源碼
      網站素材
      前端模板
      關於我們 免責聲明 Sitemap
      PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!