亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

MM們 2018-08-02 17:05:06
如果在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 是 有符號的,后續的計算 和 輸出 都是按有符號數進行處理。


查看完整回答
反對 回復 2018-08-05
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

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

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

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


查看完整回答
反對 回復 2018-08-05
  • 3 回答
  • 0 關注
  • 1383 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號