碼農養成記4——原碼、反碼、補碼

轉載請標明地址 QuincySx:www.jianshu.com/p/f134b15ff…bash

原碼、反碼、補碼是什麼

數字最先被咱們在天然界抽象出來的時候本沒有正負之分,好比一我的,兩我的,三我的。沒有負一我的之說ui

那麼在計算機表示數字的時候也是沒有正負之分,如今咱們假設計算機是用 1 字節也就是 8 bit 來存儲數據,那麼數字 一、2 再計算機中如何表示呢spa

//無符號
1 -> 0000 0001
2 -> 0000 0010
複製代碼

想必你們都知道現階段咱們使用的計算機數據存儲運算都是二進制數據設計

到了後來在咱們生活中爲了表示「你欠我錢」等等這個概念,因此劃分出了『正數』、『負數』code

那麼相應的計算機世界就出現了 原碼 這個概念get

原碼:把最左邊的一位騰出來表示正負,0 表示正數,1 表示負數it

//原碼
+1 -> 0000 0001
+2 -> 0000 0010
-1 -> 1000 0001
-2 -> 1000 0010
複製代碼

當計算機世界發明了原碼以後出現一個棘手的問題,就是天然界中 1 + (-1) = 0 而計算機的計算結果呢 00000001 + 10000001 = 10000010 (-2) 咦這個結果可不對啊,怎麼辦呢class

因此聰明的人類又給計算機世界發明了 反碼基礎

反碼:正數的反碼與其原碼相同,負數的反碼是符號位不變其餘位取反二進制

//反碼
+1 -> 0000 0001
+2 -> 0000 0010
-1 -> 1111 1110
-2 -> 1111 1101
複製代碼

這個問題解決了可是又出現了一個新的問題,00000001 + 11111110 = 11111111 (-0) 這樣一來在計算機中出現了兩個 0 這可不行

//反碼
+0 -> 0000 0000
-0 -> 1111 1111
複製代碼

怎麼辦呢,人們又爲計算機世界貢獻了 補碼 的概念

補碼:正數的補碼與其原碼相同,負數在反碼的基礎上 +1

//補碼
+1 -> 0000 0001
+2 -> 0000 0010
-1 -> 1111 1111
-2 -> 1111 1110
複製代碼

這樣一來 00000001 + 11111111 = 1 0000 0000 但是位數超了但是咱們的存儲空間就 8 bit 怎麼辦呢,因此就捨去 1 保留 00000000 (0)

這樣一來就完美了,在計算機世界中進行數據運算就和咱們的規則就統一了

小結

上述過程在現實發展中確定不是這個過程,由於這是我胡亂造的(哈哈,是否是有點信覺得真),可是他們的出現確實是爲了解決上面說的問題

經過這篇文章咱們瞭解了原碼、反碼、補碼

原碼:把最左邊的一位騰出來表示正負,0 表示正數,1 表示負數 反碼:正數的反碼與其原碼相同,負數的反碼是符號位不變其餘位取反 補碼:正數的補碼與其原碼相同,負數在反碼的基礎上 +1

上面還遷移默化的說了一個問題不是到各位觀衆老爺看出來了沒

就是現代計算機運算都是先換算成補碼而後進行運算的

有說的不明白的地方歡迎各位拍磚

相關文章
相關標籤/搜索