導航:首頁 > 源碼編譯 > 73二進制補碼運演算法則

73二進制補碼運演算法則

發布時間:2022-04-22 15:20:27

㈠ 如圖是87-(-73)的二進制補碼運算,可是最高位沒法借位了,請問該怎麼辦呢

最高位不夠減,「照借不誤」。

實際上要計算機內,加法有加法器實現,減法是轉換成補碼的加法(加上減數的相反數)來運算的。

㈡ 十進制的-73的補碼是多少

先說73,十進制的73轉為二進制:(73)10=64+8+1=2^6+2^3+2^0=(1001001)2,這里數一下二進制7位,正數的符號位是0,用8位表示的話,所以加上符號位後73的原碼=01001001,正數的反碼,補碼都和原碼一樣,所以都是01001001....

計算機中的負數是以其補碼形式存在的 補碼=原碼取反+1,也就是10110111

㈢ 二進制補碼怎麼計算的

1、正數的補碼表示:

正數的補碼 = 原碼

負數的補碼 = {原碼符號位不變} + {數值位按位取反後+1} or

= {原碼符號位不變} + {數值位從右邊數第一個1及其右邊的0保持不變,左邊安位取反}

以十進制整數+97和-97為例:

+97原碼 = 0110_0001b

+97補碼 = 0110_0001b

-97原碼 = 1110_0001b

-97補碼 = 1001_1111b

2、純小數的原碼:

純小數的原碼如何得到呢?方法有很多,在這里提供一種較為便於筆算的方法。

以0.64為例,通過查閱可知其原碼為0.1010_0011_1101_0111b。

操作方法:

將0.64 * 2^n 得到X,其中n為預保留的小數點後位數(即認為n為小數之後的小數不重要),X為乘法結果的整數部分。

此處將n取16,得

X = 41943d = 1010_0011_1101_0111b

即0.64的二進製表示在左移了16位後為1010_0011_1101_0111b,因此可以認為0.64d =0.1010_0011_1101_0111b 與查詢結果一致。

再實驗n取12,得

X = 2621d = 1010_0011_1101b 即0.64d =0.1010_0011_1101b,在忽略12位小數之後的位數情況下,計算結果相同。

3、純小數的補碼:

純小數的補碼遵循的規則是:在得到小數的源碼後,小數點前1位表示符號,從最低(右)位起,找到第一個「1」照寫,之後「見1寫0,見0寫1」。

以-0.64為例,其原碼為1.1010_0011_1101_0111b

則補碼為:1.0101_1100_0010_1001b

當然在硬體語言如verilog中二進製表示時不可能帶有小數點(事實上不知道哪裡可以帶小數點)。

4、一般帶小數的補碼

一般來說這種情況下先轉為整數運算比較方便

-97.64為例,經查詢其原碼為1110_0001.1010_0011_1101_0111b

筆算過程:

-97.64 * 2^16 = -6398935 =1110_0001_1010_0011_1101_0111b,其中小數點在右數第16位,與查詢結果一致。

則其補碼為1001_1110_0101_1100_0010_1001b,在此採用負數的補碼 = {原碼符號位不變} + {數值位按位取反後+1} 方法

5、補碼得到原碼:

方法:符號位不動,幅度值取反+1or符號位不動,幅度值-1取反

-97.64補碼 =1001_1110(.)0101_1100_0010_1001b

取反 =1110_0001(.)1010_0011_1101_0110b

+1 =1110_0001(.)1010_0011_1101_0111b 與查詢結果一致

6、補碼的拓展:

在運算時必要時要對二進制補碼進行數位拓展,此時應將符號位向前拓展。

-5補碼 = 4'b1011 = 6'b11_1011

ps.原碼的拓展是將符號位提到最前面,然後在拓展位上部0.

-5原碼 = 4『b』1101 = 6'b10_0101,對其求補碼得6'b11_1011,與上文一致。

(3)73二進制補碼運演算法則擴展閱讀:

計算機中的符號數有三種表示方法,即原碼、反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示「正」,用1表示「負」,而數值位,三種表示方法各不相同。

在計算機系統中,數值一律用補碼來表示和存儲。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬體電路。

㈣ 二進制數反碼和補碼的演算法

計算機里的二進制數有八位、十六位等,下面以八位為例
19的二進制數為:0001
0011
那麼+19
原碼為
0001
0011
反碼為
0001
0011
補碼為
0001
0011
那麼-19
原碼為
1001
0011
(左邊第一位表示正負數,正數為0,負數為1)
反碼為
1110
1100
補碼為
1110
1101

㈤ 補碼運算規則是什麼

對於正數,原碼反碼補碼都是一樣的,對於負數,不看符號位對於剩下求反。

就是把0變成1把1變成0,就是求反了,求反後+1再添上符號位.就得到了補碼,注意這里符號位是不參與取反與+1的10000001

首位(符號位)是1,這個數位負數。

取反:11111110加1

11111111結果為-127

(5)73二進制補碼運演算法則擴展閱讀:

正數

正整數的補碼是其二進製表示,與原碼相同。

例:+9的補碼是00001001。(備註:這個+9的補碼是用8位2進制來表示的,補碼表示方式很多,還有16位二進制補碼表示形式,以及32位二進制補碼表示形式,64位進制補碼表示形式等。每一種補碼表示形式都只能表示有限的數字。)

㈥ 87+(-73)表示成二進制補碼,然後按補碼進行運算,麻煩幫我這下過程,看看結果是否溢出

若字長8位,則:
[-73]原 =11001001b
[-73]反 =10110110b
.
[-73]補 =10110111b
[87]補 =01010111b (+
------------------------------
[87-73]補=00001110b 最高位(符號位)進位自然丟失
結果 87+(-73) =+1110b =+14d
Cs⊕Cp = 1⊕1 = 0 無溢出,
(Cs是符號位的進位,Cp是最高數值位的進位,⊕表示異或)

㈦ 二進制補碼怎麼算

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

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

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

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

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

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

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

?( 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等其他高級語言中使用的都是原碼。看了上面這些大家應該對原碼、反碼、補碼有了新的認識了吧!

㈧ 如何理解二進制原碼,反碼,補碼,二進制補碼運算

帶符號數,有三種表示方法,即:原碼、反碼和補碼。

但是,在計算機系統中,數值一律用【補碼】來表示和存儲。

所以,在計算機系統中,原碼和反碼,都是不存在的。

使用補碼的意義:可以把減法或負數,轉換為加法運算。

因此,就能簡化計算機的硬體。

=====================

補碼的概念,來自於:補數。

比如鍾表,時針轉一圈,周期是 12 小時。

那麼,倒撥 3 小時,可以用正撥 9 小時代替。

9,就是-3 的補數。計算方法:9 = 12-3。

同理,分針倒撥 X 分,可以用正撥(60-X)代替。

60,是分針的周期。

懂得三角函數的同學,都知道,三角函數的周期是 2π。

那麼,在-π/2+3π/2 處的函數值是相同的,可互換。

演算法是:+3π/2 =2π - π/2。

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

當你使用兩位十進制數:0~99,周期就是 一百。

那麼,減一,就可以用 +99 代替。

24-1 = 23

24 + 99 = (1) 23

舍棄進位,這兩種演算法,功能就是相同的。

於是,99 就是 -1 的補數。

計算:補數 = 周期 + 負數

對於其它負數,自己去求補數吧。

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

計算機中使用二進制,補數,就改稱為【補碼】。

八位二進制是:0000 0000~1111 1111。

相當於十進制:0~255,周期就是 256。

那麼,-1,就可以用 255 = 1111 1111 代替。

所以:-1 的補碼,就是 1111 1111 = 255。

同理:-2 的補碼,就是 1111 1110 = 254。

繼續:-3 的補碼,就是 1111 1101 = 253。

。。。

最後:-128 的補碼,就是 1000 0000 = 128。

負數補碼的計算公式:【 256 + 這個負數 】。

(式中的 256 = 2^8,是八位二進制的周期。)

正數,並不存在補碼的問題。

所以,正數,並沒有補碼,可以直接運算。

(也有人亂說:正數本身就是補碼。)

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

求解算式:7-3 = 4。

計算機中,並沒有減法器,必須改用補碼相加。

列豎式如下:

7 的補碼=0000 0111

-3的補碼=1111 1101

--相加-------------

得:(1)0000 0100= 4 的補碼

舍棄進位,只保留八位,結果完全正確。

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

藉助於補碼,可以簡化計算機的硬體。

原碼和反碼,都沒有這種功能。

所以,在計算機中,根本就沒有原碼和反碼。

它們都是什麼?就不用關心了。

㈨ 二進制補碼運演算法則是什麼

正數的補碼=原碼

負數的補碼={原碼符號位不變}+{數值位按位取反後+1} or

= {原碼符號位不變}+{數值位從右邊數第一個1及其右邊的0保持不變,左邊安位取反}

以十進制整數+97和-97為例:

+97原碼=0110_0001b

+97補碼=0110_0001b

-97原碼=1110_0001b

-97補碼=1001_1111b



(9)73二進制補碼運演算法則擴展閱讀

意義

1、解決了符號的表示的問題;

2、可以將減法運算轉化為補碼的加法運算來實現,克服了原碼加減法運算繁雜的弊端,可有效簡化運算器的設計;

3、在計算機中,利用電子器件的特點實現補碼和真值、原碼之間的相互轉換,非常容易;

4、補碼表示統一了符號位和數值位,使得符號位可以和數值位一起直接參與運算,這也為後面設計乘法器除法器等運算器件提供了極大的方便。

㈩ 二進制補碼運算溢出判斷

補碼運算的溢出判別方式為雙高位判別法,利用Cs表示符號位是否進位,利用Cp表示最高數值位是否進位。如果Cs ^ Cp的結果為真,則代表發生了溢出(運算結果大於0則為負溢出,小於0則為正溢出),否則運算結果正確。

例如:

1000 0011(補碼為-3,原碼為-125) 0000 0011(補碼為3,原碼為3)

+1100 1001(補碼為-73,原碼為-55) +1100 1001(補碼為-73,原碼為-55)

10100 1100(補碼為76,原碼為76) 01100 1100(補碼為-76,原碼為-52)

Cs為1,Cp為0所以產生了負溢出。 Cs為0,Cp為0所以結果正確。

(10)73二進制補碼運演算法則擴展閱讀

二進制補碼運算規則:

1、正數:原碼=反碼=補碼

2、負數:原碼(第一位是1符號位)=反碼(除第一位符號位外,其它按位取反)=補碼(反碼+1)

3、0:原碼=反碼=補碼=0

舉例:

1、15-5=15+(-5)=10

原碼:

15:0000 1111

-5:1000 0101

反碼:

15:0000 1111

-5:1111 1010

補碼:

15:0000 1111

-5:1111 1011

閱讀全文

與73二進制補碼運演算法則相關的資料

熱點內容
程序員接私活初級 瀏覽:431
全無油潤滑壓縮機 瀏覽:183
代碼加密常用方法 瀏覽:952
安卓手機如何解除已禁用 瀏覽:396
演算法的隨機性 瀏覽:485
高中解壓體育游戲 瀏覽:533
androidstudior丟失 瀏覽:345
命令行筆記 瀏覽:737
360目標文件夾訪問拒絕 瀏覽:518
3b編程加工指令 瀏覽:789
c8051f系列單片機選型手冊 瀏覽:772
南昌php程序員 瀏覽:512
bcs命令 瀏覽:446
如何在伺服器指向域名 瀏覽:417
車床編程可以做刀嗎 瀏覽:519
ln命令源碼 瀏覽:792
用粘液做解壓手套 瀏覽:331
icloud收信伺服器地址 瀏覽:500
編程思考者 瀏覽:453
壓縮機型號用什麼氟利昂 瀏覽:553