Examly題庫立即開始練習
國中教甄|資訊科技資訊科技112 年第 57 題單選題

請問下列程式碼的輸出為何? #include <stdio.h> int main() { char v = 108; char mask = 0x80; for ( int i = 0 ; i < 8 ; i++ ) { if ( v & mask ) printf( "1" ); else printf( "0" ); mask = mask >> 1; } return 0; }

A10101100
B01101100
C01111111正確答案
D11111111
答案與詳解
C
正確答案
在常見有號 char 與算術右移環境,0x80 會成為 -128,右移後 mask 高位持續補 1,使輸出為 01111111。

為什麼答案是 C

常見平台 char 是 signed,0x80 存入後為 -128,位元為 10000000。mask>>1 時先提升為 int,負數右移為算術右移,高位補 1;存回 char 後低 8 位依序得 0x80、0xC0、0xE0、0xF0、0xF8、0xFC、0xFE、0xFF。以低 8 位元觀察,v & mask 依序為 0x00、0x40、0x60、0x60、0x68、0x6C、0x6C、0x6C;非 0 輸出 1,故輸出 01111111。

載入中…

資訊科技 相關題目

想練更多資訊科技考古題?

Examly 收錄 38 萬+ 道歷屆題目,每題都有像這樣的精選詳解。免費下載,立即開練。

黑皮