五分钟理解原码补码反码和移码
這是計算機的基本知識了,一定要好好學。哈哈廢話不多說,直接進入正題吧。計算機中有無符號數和有符號數兩大類。
有符號數就是正負數,在計算機中正好用0和1分別去代表正和負。(ps:好多人不理解機器數和真值,機器數就是把符號數字化的數,而真值就是帶正負號的數。)
1.先說說原碼
?????整數原碼
x是真值,真值大于0,原碼就是它本身,只需要在它的前面放一個0就好了。? ? ? ? ? ? ? ? ? ? ? ??
如果x小于0,那為啥要這樣寫呢?這個-x實際相當于|x|,2^n加上|x|就是在它前面放個1來表示符號。
?小數原碼
這里的關系就和上面說的道理一樣了。不想說了。
舉個例子
假設有x=-1011?
[x]原=2^4-(-1011)=10000+1011=1,1011
2.補碼
補碼是為了簡化運算,比如說兩個一正一負的原碼相加,我們不僅要考慮哪個數要大一點然后還要去看它倆和是正是負,很煩。補碼就是為了解決這一麻煩事,把減法變成加法。
?整數補碼
它的原理就是求補數,什么你不懂補數?好吧,我舉個例子,就比如我們家里的指針表,12一圈 ,假設現在指針指向3,你想讓他到5,怎么辦?這時候大多數人都會讓指針順時針旋轉到5 ,但你別忘了逆時針旋轉也是可以的,順時針要旋轉2,逆時針旋轉10,這里我們把2和-10叫做以12為模的補數。說白了負數就是求與它等價的正數,也就是它的補數。在這里尤其要弄清楚它的模是什么。
?小數補碼
小數補碼模為啥是2?你想想如果是1那是怎么回事?
舉個例子
有x=-0.0110
如果模為1,[x]補=1.0000-0.0110=0.1010
小數點前是符號位變成了正的,但如果以2為模結果就是1.1010正好彌補了符號。
3.反碼
反碼到底有啥用啊?反碼實際上是補碼與原碼的中間產物,不知道你有沒有聽過:原碼求補碼,符號位不變,每位取反 ,末位加一。這里每位取反就是我們的反碼了,很簡單。同理用補碼求原碼的過程中:末位減一,也得到了反碼。? ? ? ? ? ? ? ? ? ? ? ? ? ? ?整數反碼
這個x大于0就不說了,說說小于0。下面這個2^(n+1)+x實際就是通過補碼來求的,你可以看看補碼。
舉個例子
比如x=-1000
[x]反=2^5-1-1000=11111-1000=1,0111
?小數反碼
小數反碼也是這個道理,在整數反碼減1和小數反碼中減2^-n都是一樣的道理,相對于補碼來說都是末尾減一。注意末尾減一不是減一。
4.移碼
(終于說到移碼了,口干舌燥的寫了一個多小時,拿手機寫的,忘了帶電腦555~)
我們為啥要設置移碼呢?在我們計算機中無法識別正負,我們人眼直接看到的大小機器識別不了,這就引入了移碼,(顧名思義:移動的碼 哈哈)
?看不懂吧,我也看不懂,哈哈😃
打個比方,比如五個數abcde,有正有負,移碼的思想就是把它們都平移到正半軸 ,加相同的數,但是相對大小不變,計算機一看都是正數,就好去比較它們的大小了。思想理解了,就很容易看懂公式了。
廢話:啊,差不多就這么多了,本來我是叫不想打字,這會居然抱個手機寫了半天,累了累了,準備回宿舍睡覺覺了,希望大家學到知識的給我點個鼓勵。拜拜~
總結
以上是生活随笔為你收集整理的五分钟理解原码补码反码和移码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fastclick-源码解析
- 下一篇: python shp地理坐标系转换平面