原碼,反碼,補碼的研究和理解。

2021-06-23 02:12:22 字數 891 閱讀 2775

雖然大一上,計算機導論課的時候講過這個問題,但是當時只知道是怎麼計算的,並不能理解其中的原理,最近看了一些資料才理解的比較深刻。主要是看了 

c語言中

int型的

取值範圍

_ 這篇,受益很大。

那篇文章中舉了乙個例子:假設當前時針指向10點,而準確時間是6點,調整時間可有以下兩種撥法:    一種是倒撥4小時,即:10-4=6    另一種是順撥8小時:10+8=12+6=6 。

在以12模的系統(數字只有0~11)中,加8和減4效果是一樣的,因此凡是減4運算,都可以用加8來代替。 對「模」而言,8和4互為補數。實際上以12模的系統中,11和1,10和2,9和3,7和5,6和6都有這個特性。共同的特點是兩者相加等於模。

這就是為什麼計算機可以把減法轉化成加法,而且超出的最高位抹去不要,用的就是這個思想 。

下面我說一下我對原碼,反碼,補碼的理解。還是舉乙個例子,比如乙個四位的整數資料型別0101(也就是5)

-0010(也就是2)計算機是怎麼把它算成0011(也就是3)的。根據上面的思想,四位整數型別的模是10000。所以-0010相當於+(10000-0010)(實際上這個數就是補碼),但是(10000-0010)算起來不是那麼方便。所以不如讓10000先-1,變成1111,再用這個數來-0010,最後再+1,也和剛才的數一樣。1111-0010非常好算了,因為1111每一位都是最大的數1,只需要對應的把每一位的1變成0,0變成1就行了,得到的這個結果是1101(實際上這個就是反碼),然後再+1,得到1110(補碼)。所以就是0101-0010就和0101+1110=(1)1011最高位的1捨去,即1011(3)。

以上如果用原碼反碼補碼的知識去計算十分相似。

所以我覺得計算機中應該沒有反碼的概念,反碼只是人們模擬計算機運算時算補碼比較方便的乙個中間產物,計算機中只有原碼和補碼。

原碼 反碼和補碼的理解

對於原碼 反碼和補碼有了一些理解,分享給大家 正 負號加某進製數絕對值的形式成為真值 例 x 1011 y 1011 符號數位化的數稱為機器數 機器數有四種表示方法 原碼 補碼 反碼和移碼。下面的描述新增為機器字長為 8位二進位制 最高位表示真值符號 0正,1負,且符號位不參與運算,計算機要實現原碼...

原碼 反碼 補碼的理解

1 討論原碼之前首先需要了解兩個概念 機器數和真值。a.乙個數值在計算機中的二進位制表示形式,就稱為這個數值的機器數。機器數是帶符號的,其中最高位是符號位,1表示負數,0表示正數。比如,1100 0000就是 64的機器數,即在計算機中的二進位制表示形式。同樣的,0100 0000就是64的機器數。...

原碼反碼補碼的理解

本文採用4位二進位制數的例子,從表象對原碼反碼補碼進行 旨在說明為什麼計算機底層要用補碼表示數字以及用補碼表示數字的優點,不涉及任何數學原理。4位二進位制數的原碼表示 0 1 2 3 4 5 6 7 0000 0001 0010 0011 0100 0101 0110 0111 0 1 2 3 4 ...