1. 程式人生 > >【軟考】——機器數及其運算

【軟考】——機器數及其運算

機器數和真值的概念:

          機器數:一個數在計算機中的二進位制表示形式;

          真值:帶符號位的機器數對應的真正數值(十進位制的數)稱為真值;

          原碼:符號位+真值的絕對值(二進位制);

  1. 原碼、反碼、補碼和移碼其實是機器數的編碼方法,並被稱為碼制;而機器數有兩種型別:無符號數、帶符號數;
  2. 無符號數表示正數;而整數有分為兩種型別:一種是純整數,另一種是純小數;(純整數:約定小數點的位置在機器數的最低位之後;純小數:約定小數點的位置在機器數的最高位之前之前)
  3. 帶符號數有正負之分:其(機器數)最高位是表示正、負的符號位,其餘位則表示數值;

原碼的例子???——》

[ +1 ] = 0 0000001,[ -1 ] = 1 0000001;

注意:

  1. 最高位是符號位,0表示正號,1表示負號,其餘的n-1位表示數值的絕對值;
  2. 第一位是符號位,其影響二進位制的取值範圍;

反碼的例子???——》

[ +1 ] = 0 0000001,[ -1 ] = 1 1111110;

注意:

正數???——》反碼與原碼相同,負數的反碼則是其絕對值按位求反;

負數???——》反碼是在其原碼的基礎上,符號位不變,其餘各個位取反;

【例子】

在這裡,我提示下各位,要看出反碼的十進位制數值,就要把它還原會原碼才可以計算得出;

補碼的例子:

[ +1 ] = 1 0000001;[ -1 ] = 0 1111111;

注意:

1、正數的補碼與其原碼和反碼相同,負數的補碼則等於其反碼的末位加1;(特例:[ +0 ] = 0 0000000;[ -0 ] = 0 0000000)

2、負數的補碼也就是在其原碼的基礎上,符號位不變,其餘各位取反(0:正,1:負),最後+1;

【例子】

【軟考知識】

1、最適合進行數字加減運算的數字編碼是補碼;???——》CPU只設置硬體加法器;???——》只有補碼能夠將減法轉化為加法;

2、最合適表示浮點數階碼的數字編碼是移碼;???——》被廣泛用來表示浮點數階碼的數字編碼;???——》用比較階碼的大小來實現真值大小的比較;

對原碼、反碼、補碼的使用進一步的瞭解???——》

         一般我們對加減乘除運算從小學開始學會後,就一直以為計算就該這麼算;但是你要知道,計算機不是人,它只會邏輯;所以加減乘除這相對人類而言是最基礎的運算,但對計算機而言,因為計算機只會辨認"符號位(正負)",所以用二進位制來表示加、減這兩種運算方式,會使計算機的基礎電路設計變得十分複雜;於是人們就想出了將符號位也參與運算的方式;首先我們都知道:1-1=0,但是我們很少會這麼寫:1+(-1)=0;但是這樣機器運算就可以只有加法而沒有了減法,從而機器數的運算方式設計變得簡單啦!

現在就來個原碼栗子吧!讓大家瞭解的更深刻一點哈!

唉!怎麼1+(-1)=-2,這也就是為什麼還要反碼等其他碼;

為了解決這個原碼做減法這個問題,就設計了一個反碼原理,再來一顆栗子(反碼)

         通過上面那個例子,大家對原碼和反碼多點了解嗎?其實反碼還有一個問題,那就是“0”這個特殊的數值;雖然大家對+0和-0的理解上是一樣的,但是上面的0帶符號不是就沒有意義啦,而且[ 0000 0000]和[ 1000 0000]兩個編碼都表示0的意思;

         於是補碼這個原理就來了,還是和上面一樣,先來個栗子:

         上面的栗子用了[0000 0000]表示0,而以前出現-0的奇特數值,就沒有啦!並且可以用[1000 0000]表示-128;

     補碼的出現,解決了0的符號以及兩個編碼的問題,而且還能夠多表示一個最低數;

        這就是為什麼是8位的二進位制,使用原碼或反碼錶示的範圍:[ -127,+127 ],而使用補碼錶示的範圍為[ -128,,127];

因為機器使用補碼,對於編碼中常用到的32位int型別,可以表示的範圍是:[-2^31,2^31-1],因為第一位表示的是符號位,而使用補碼錶示時又可以多儲存一個最小值;

更深入的瞭解???——》

將減法變成加法,這背後究竟蘊含了怎麼的數學原理呢?

首先將鐘錶想象成是一個1位的12進位制;如果當前時間是6點,而我希望的是將時間設定成4點,那我們需要怎麼做呢?

解決方式有:

     1、往回撥2個小時:6-2=4;

     2、往前撥10個小時:(6+10)mod  12 = 4;

     3、往前撥10+12=22個小時:(6+22)mod  12 = 4;

     2,3方法中的mod是指取模操作,16  mod  12 = 4,即用16除以12的餘數是4;從這3個方法中我們可以看到出,鐘錶往回撥(減法)的結果可以用往前撥(加法)代替;

     現在的焦點就是落在瞭如何用一個正數來代替一個負數;通過上面的解決方式,我們可以感覺到一些規律,但是數學可是用邏輯來計算的,不能憑著個人的感覺來;

現在,我就來給大家來介紹下同餘和負數取模的概念

同餘概念:兩個整數a,b;若它們除以整數m所得的餘數相等,則稱a,b對於模m同餘;

負數取模:

mod運算的數學定義:clip_image001

公式的意思:x mod y等於x減去y乘上x與y的商的下界

再來一個栗子,今天可吃了不少栗子~哦!

 -3 mod 2

=  -3 -2*

那接下來就求證一下有關鐘錶的問題啦!

大家給個贊,就是給我最大的鼓勵!!!

注意:“贊”位於右上角;