回覆列表
  • 1 # 何以笙丶丶

    二進位制的減法運演算法則是:

    0-0=1-1=0

    1-0=1

    0-1=1(向高位借位)

    例如,(11000011)2-(00101101)2的算式如下:

    11000011 被減數

    00101101 減數

    ---1111 借位 (減號是對齊美觀用的)

    -------------------

    10010110 差數

    這個借位其實很容易理解的,向前一位借一,計算到該位時再減去一即可.

    比如被減數0,減數1,演算法應該是0-1=1(向高位借一)但是該被減數被後面的借了一位,那麼現在的算式應該是0-1-1=0(減掉被借的1,再向高一位借1)以此迴圈至到沒有可借的為止.

    二進位制的加法運演算法則是:

    0+0=0

    0+1=1+0=1

    1+1=0(向高位進位)

    例如,(110)2+(1011)2的算式如下:

    +110 被加數 (加號是對齊美觀用的)

    1011 加數

    111 進位

    ----------------

    10001 和數

    二進位制的乘法運演算法則是:

    0*0=0

    0*1=1*0=0

    1*1=1

    二進位制的乘法可以歸結為"復位+移位"操作.移位像加法運算那樣

    二進位制的除法運演算法則是:

    0/1=0(1/0無意義)

    1/1=1

    在計算機內部,二進位制數的加法是基本運算,利用加法可以實現二進位制數的減法、乘法和除法運算。其原理主要是應用了“補碼”運算

    二進位制補碼

    數值在計算機中表示形式為機器數,計算機只能識別0和1,使用的是二進位制,而在日常生活中人們使用的是十進位制,"正如亞里士多德早就指出的那樣,今天十進位制的廣泛採用,只不過我們絕大多數人生來具有10個手指頭這個解剖學事實的結果.儘管在歷史上手指計數(5,10進位制)的實踐要比二或三進位制計數出現的晚."(摘自>有空大家可以看看哦~,很有意思的).為了能方便的與二進位制轉換,就使用了十六進位制(2 4)和八進位制

    1.數值有正負之分,計算機就用一個數的最高位存放符號(0為正,1為負).這就是機器數的原碼了.假設機器能處理的位數為8.即字長為1byte,原碼能表示數值的範圍為

    (-127~-0 +0~127)共256個.

    I.有了數值的表示方法就可以對數進行算術運算.但是很快就發現用帶符號位的原碼進行乘除運算時結果正確,而在加減運算的時候就出現了問題,如下: 假設字長為8bits

    ( 1 )?10-? ( 1 )10?=? ( 1 )10?+ ( -1 )10?= ?( 0 )10

    (00000001)原?+ (10000001)原?= (10000010)原?= ( -2 )?顯然不正確.

    II.因為在兩個整數的加法運算中是沒有問題的,於是就發現問題出現在帶符號位的負數身上,對除符號位外的其餘各位逐位取反就產生了反碼.反碼的取值空間和原碼相同且一一對應. 下面是反碼的減法運算:

    ?( 1 )10?-? ( 1 )?10=? ( 1 )?10+ ( -1 )?10= ?( 0 )10

    ?(00000001)?反+ (11111110)反?=? (11111111)反?=? ( -0 ) ?有問題.

    ( 1 )10?-? ( 2)10?=? ( 1 )10?+ ( -2 )10?= ?( -1 )10

    (00000001)?反+ (11111101)反?=? (11111110)反?=? ( -1 )?正確

    問題出現在(+0)和(-0)上,在人們的計算概念中零是沒有正負之分的.(印度人首先將零作為標記並放入運算之中,包含有零號的印度數學和十進位制計數對人類文明的貢獻極大).

    於是就引入了補碼概念. 負數的補碼就是對反碼加一,而正數不變,正數的原碼反碼補碼是一樣的.在補碼中用(-128)代替了(-0),所以補碼的表示範圍為:

    (-128~0~127)共256個.

    注意:(-128)沒有相對應的原碼和反碼, (-128) = (10000000) ?補碼的加減運算如下:

    ( 1 )10- ( 1 )?10=? ( 1 )10?+ ( -1 )10?= ?( 0 )10

    (00000001)補?+ (11111111)補?=? (00000000)補?= ( 0 )?正確

    ( 1 )?10-? ( 2)?10=? ( 1 )10?+ ( -2 )10?= ?( -1 )10

    (00000001)?補+ (11111110)?補=? (11111111)補?= ( -1 ) ?正確

    所以補碼的設計目的是:

    ⑴使符號位能與有效值部分一起參加運算,從而簡化運算規則.

    ⑵使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計

    ? 所有這些轉換都是在計算機的最底層進行的,而在我們使用的彙編、C等其他高階語言中使用的都是原碼。看了上面這些大家應該對原碼、反碼、補碼有了新的認識了吧!

  • 中秋節和大豐收的關聯?
  • 龍鬚棗樹有什麼樣的作用?