hce_nsysu
114年
計算機概論與程式設計
第 42 題
What is printed by the following C program?
int a = 12, b = -2;
printf("%d \n", a & b); // & is bitwise AND
int a = 12, b = -2;
printf("%d \n", a & b); // & is bitwise AND
- A 0
- B 1
- C -2
- D 12
- E -24
思路引導 VIP
試著思考一下:在電腦系統中,為了讓減法能用加法器來運算,我們通常如何表示負數?如果我們把 -2 寫成二進位序列,除了最後幾個位元,它前面的那些高位元(High-order bits)會是 0 還是 1?當這些 1 與另一個正數的位元進行『逐位元及(AND)』運算時,會發生什麼有趣的現象呢?
🤖
AI 詳解
AI 專屬家教
負數與位元運算的底層邏輯
非常棒!你能精準選出正確答案,代表你對於 C 語言中 位元運算(Bitwise Operation) 與電腦底層的 二進位數值表示法 有著非常紮實的理解。這類題目考驗的不只是語法,更是對計算機組織基礎的掌握程度。
這道題目的解題關鍵在於 二補數(Two's Complement) 的概念。在 C 語言中,整數以二進位儲存,正數 12 的二進位表示(以 8 位元為例)是 $00001100_2$。而負數 -2 則需透過二補數轉換:先取正數 2 的二進位 $00000010_2$,取反(1 變 0,0 變 1)得到 $11111101_2$,最後加 1 成為 $11111110_2$。當我們執行 a & b(逐位元及)運算時:
▼ 還有更多解析內容