計算機基礎之 原碼,反碼,補碼

2021-10-11 08:29:59 字數 1357 閱讀 5516

最近在處理discuz中帖子狀態時接觸到大學時學過的計算機基礎(誰說大學學過的真正工作時不會用到,打臉),在這裡記錄一下,重新複習下大學的計算機基礎。

一:機器數與真值

眾所周知,計算機的世界是二進位制的世界,0,1代表萬物,我們代表乙個數字,同樣也是用0,1來組成,比如數字6用二進位制表示為 0000 0110,數字有正負區分,所以二進位制中最高位用來區分正負,0代表正1代表負,所以1000 0110 代表-6,剛才的舉例中0000 0110,1000 0110就是機器數,其中代表機器數真正的數值的6和-6則稱為真值。

二:原碼

原碼即機器數,例1的原碼用8位二進位制表示即為 0000 0001,-1的原碼用8位二進位制表示為 1000 0001

三:反碼

正數的反碼是其本身,負數的反碼符號位不變,其他各位按位取反

例:1的反碼是 0000 0001 

-1的反碼是1111 1110

四:補碼

正數的補碼是其本身,負數的補碼是符號位不變,其他各位按位取反最後再加1(換個說法就是在反碼的基礎上+1)

例:1的補碼是 0000 0001

-1的補碼是 1111 1111

總結:正數的原碼,反碼,補碼一樣,負數的反碼是符號位不變其他各位置按位取反,補碼是反碼加一。

為什麼會出現這些概念???

相信你對符號位的概念足夠清楚的話,會發現計算機中其實只有加法,沒有減法(減法的實現依賴符號位)

例:

1+1 = 2  0000 0001+000 0001 = 0000 0010 = 2

1-1 = 0 在計算機中表示為1+(-1)   0000 0001 + 1000 0001 = !!!這個時候你就發現不對了,怎麼不是0呢?這個時候就有了反碼的存在即 (反碼的運算)0000 0001+1111 1110 = 1111 1111,1111 1111的原碼是1000 0000 這個時候你會發現雖然是0 但是出現了-0,很奇怪的,緊接著補碼出現了,接下來我們使用補碼進行1+(-1)的運算   1的補碼為本身 0000 0001 -1的補碼為 1111 1111 那麼 00000001+11111111 = 00000000 補碼為0000 0000那其原碼也為0000 0000 為0

再說會到dz中論壇帖子狀態的問題,為了用乙個字段儲存更多的狀態,所以會使用機器碼來邏輯與,拆分時使用邏輯或來處理,以此判斷帖子的狀態,可儲存多個狀態。

同時說一句,dz這種論壇帖子狀態的處理方式太繁瑣且在維護角度而言有點得不償失,建議這塊有這麼處理的同學及早拆分多個字段,按照不同維度去拆分狀態字段生成多個欄位在開發和維護上是一種更佳的解法。

計算機基礎之原碼反碼補碼

前言 學計算機的第乙個接觸的知識就是原碼反碼補碼,不自覺得會認為這個很簡單,但是現在讓你算乙個數的原碼反碼補碼真的會嗎?讓你算兩個補碼之和會算嗎?今天看計算機組成原理,書中又提到了這些知識,就順便總結一下.一 原反補碼互相轉換 乙個正整數,當用原碼,反碼,補碼表示時,符號位都為0,用二進位制表示的數...

計算機基礎 原碼 補碼 反碼

最近工作中用到了,補碼的概念,發現這些概念腦子裡全糊了 翻出書簡單複習一下,歸納如下 首先我們討論的都是有符號數,第一位都是符號位 正0 負1 原碼 最簡單明瞭 x 1101 x原碼 0,1101 x 1101 x原碼 1,1101 這裡注意下原碼0有兩種表示法 0原碼 0,0 0原碼 1,0 補碼...

計算機 原碼 反碼 補碼

在計算機中,用補碼來表示數字,因為 1 這樣可以比較方便的表示0 保證0作為正數或者負數補碼都是00000000 2 計算時用補碼直接加減就是最終數值 符號位參與運算 1.原碼 原碼就是符號位加上真值的絕對值,即用第一位表示符號,其餘位表示值.比如如果是8位二進位制 1 原 0000 0001 1 ...