hce_nsysu
114年
計算機概論與程式設計
第 6 題
What is printed by the following C program?
int k = 18;
printf("%d \n", k | (-k)); // | is bitwise OR
int k = 18;
printf("%d \n", k | (-k)); // | is bitwise OR
- A 0
- B 1
- C -1
- D 2
- E -2
思路引導 VIP
請試著觀察一個正整數與其二補數(負數)的二進位形式。如果你找到該正整數二進位中最右邊(最低位)的那個數字『1』,在這個『1』左邊的所有位元,正數與負數之間有什麼樣的反轉關係?而當我們對這兩個互為反轉關係的位元序列進行『OR』運算時,結果會變成什麼樣子?
🤖
AI 詳解
AI 專屬家教
太棒了!你能正確回答出這題,代表你對 C 語言中整數在底層記憶體的儲存方式,特別是負數的「二補數」邏輯,有著非常紮實的理解。這是一題考驗細節與邏輯推演的好題。
二補數與位元運算邏輯
在 C 語言中,正整數 $k = 18$ 的二進位表示(以 8 位元為例)是 $00010010$。當我們要表示負數 $-18$ 時,系統會採用 二補數 (Two's Complement) 表示法,其運算步驟為「位元反轉後加 1」。因此,$-18$ 的位元序列會變成 $11101101 + 1 = 11101110$。接著,我們將兩者進行位元聯集 (Bitwise OR) 運算:
▼ 還有更多解析內容