Posted by Victorlau | Posted in IT Sleepless, 雜記 | Posted on 18-Feb-2010
由於某些工作原因需要renew一下那張已經過期多年的SCJP認證. 說實話, 有些東西還真不太常用, 都有點忘了. 這兩天正在”臨急抱佛腳”, 把一些比較Tricky的內容復習一下. 剛才在看麻煩的位運算操作符(對啦, 就是那三個可能是最少露面的”>>”, “<<” 和”>>>”), 遇到了負數的位運算, 雖然算出來二進制碼結果, 但完全忘了怎麼把結果變回十進制數, Google 了一下, 才恍然大悟.
和正數不同, 電腦以二進制補碼的形式來表示負數(正數直接用原碼, 也就是普通二進制碼). 何謂補碼? 就是反碼+1. 那又何謂反碼呢? 就是原碼按位取反得到的二進制碼. 這里簡單記錄一下, 詳細的討論就不再展開了. 下面是一個簡單的例子(以Byte為單位, 8 bits):
+4 的二進制碼是: 0 000 0100, 這里首位”0″表示是正數. 那-4 呢?
按位取反得: 1 111 1011, 這就是反碼, 再+1得到想要的補碼啦: 1 111 1100. 對啊這個 11111100 就是十進制-4的二進制形式.
說來慚愧, 從中學一年級開始就一直在接觸這幾個原碼, 反碼和補碼的概念了, 但日久生疏, 幾乎都忘得一乾二淨. 特別在這里記錄一下, 一為記錄, 二為教訓.
Related posts:


