請問下列程式碼的輸出為何? #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
答案與詳解
常見平台 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 萬+ 道歷屆題目,每題都有像這樣的精選詳解。免費下載,立即開練。
