題記
計算機存儲數(shù)值方式是通過原碼,反碼,補碼來編碼的。突然寫這個原碼 反碼 補碼 感覺很奇怪。
由于今天開始補習(xí)一下面試的知識,做了一套阿里巴巴的面試題,第一道題就是問關(guān)于求-7的補碼。查閱資料后,我覺得有必要寫下來,以后就不會忘記。
基礎(chǔ)知識
原碼
原碼是計算機和人最容易理解的表達。原碼是符號位和真實值的絕對值來表示的。對于一個二進制數(shù)來說,原碼的第一位是符號位,其余部分位表示是數(shù)值。我拿-7的8位二進制舉例說:
-7 的二進制10000111,那么-7的原碼就是10000111。
反碼
- 正數(shù)的反碼就是其本身
- 負(fù)數(shù)的反碼就是保持符號位不變,數(shù)值位的1變?yōu)?,0變?yōu)?(1-->0 ,0-->1)
我還是那7和-7來舉例。
7 的原碼是00000111。7的反碼就是 00000111
-7的原碼是10000111。-7的反碼就是11111000
補碼
- 正數(shù)的補碼也是其本身
- 負(fù)數(shù)的補碼是:在原碼的基礎(chǔ)上,保持符號位不變,數(shù)值位取反再加1。
7 的補碼是00000111,-7的補碼是11111001。
總結(jié)
正數(shù)的原碼,反碼,補碼是一樣的。
負(fù)數(shù)的原碼,反碼,補碼都一樣,但是符號位都是一樣,反碼和補碼的區(qū)別在于補碼在最后一位多加1。