免費開始練習
hce_nsysu 114年 計算機概論與程式設計

第 6 題

What is printed by the following C program?
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) 運算:

▼ 還有更多解析內容

🏷️ 相關主題

C 語言程式設計基礎與陣列記憶體配置
查看更多「計算機概論與程式設計」的主題分類考古題