如果在Linux下使用GCC編譯器執行下列程序,輸出結果是什麼?
https://segmentfault.com/q/1010000009925191
#include<stdio.h>
int main(){
char c=127;
printf("%d",++c);
printf("%d",++c);
return 0;
}
char 的長度是 1 字節,並且,大多數的機器都將其視爲有符號數的,所以它的表示範圍是 [-128, 127](參見《深入理解計算機系統》P27~P28)。所以,當你給 c 賦值 127 時,你執行了 ++c,那麼就會導致溢出,因爲它只有一個字節。
在機器中表示 127,變成二進制是這樣的 01111111,可以看到,當你加 1 之後,結果就變成了 10000000,由於在計算機內部,負數是用補碼來表示的,所以就變成了 -128。之後再 ++c,就是 -127 了。
至於不同的類型,其實在計算機內部表現的都是一樣的,都是一塊內存。所以類型不是限制。