Linux下C語言的一道經典面試題

如果在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 了。

至於不同的類型,其實在計算機內部表現的都是一樣的,都是一塊內存。所以類型不是限制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章