如果在Linux下使用GCC編譯器執行下列程序,輸出結果是什么?#include<stdio.h>int main(){ char c=127; printf("%d",++c); printf("%d",++c); return 0;}只是知道涉及到類型轉換、數據截斷填充。但不知道具體解釋?原問題出處:Linux下C語言的幾道經典面試題
3 回答

飲歌長嘯
TA貢獻1951條經驗 獲得超3個贊
這題考的是 編譯器
,而不是語言。
定義3個變量:
char c; // 表示一個 ascii字符 signed char s_c; //有符號 1字節 整數 unsigned char u_c; //無符號 1字節 整數
C語言里,c 在參與計算時, c 轉為 s_c 還是 u_c ,是由編譯器
來決定的。
gcc 認為 c 是 有符號的,后續的計算 和 輸出 都是按有符號數進行處理。

慕勒3428872
TA貢獻1848條經驗 獲得超6個贊
char
的長度是 1 字節,并且,大多數的機器都將其視為有符號數的,所以它的表示范圍是 [-128, 127]
(參見《深入理解計算機系統》P27~P28)。所以,當你給 c
賦值 127 時,你執行了 ++c
,那么就會導致溢出,因為它只有一個字節。
在機器中表示 127,變成二進制是這樣的 01111111
,可以看到,當你加 1 之后,結果就變成了 10000000
,由于在計算機內部,負數是用補碼來表示的,所以就變成了 -128。之后再 ++c
,就是 -127 了。
至于不同的類型,其實在計算機內部表現的都是一樣的,都是一塊內存。所以類型不是限制。
添加回答
舉報
0/150
提交
取消