日久生疏 – 負數的二進制表示

0

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的二進制形式.

說來慚愧, 從中學一年級開始就一直在接觸這幾個原碼, 反碼和補碼的概念了, 但日久生疏, 幾乎都忘得一乾二淨. 特別在這里記錄一下, 一為記錄, 二為教訓.

Post to Twitter Post to Plurk Post to Delicious Post to Digg Post to Facebook Post to StumbleUpon

Related posts:

  1. 這是一個瘋狂併購的年代
  2. Google的企業服務之路(一)
  3. Google與中國市場的愛情
  4. Lucene火併GSA – 由技術的選擇說起
  5. Java 4*Ever

Tags: ,

Write a comment