關於彙編中補碼的乙個疑問?

時間 2024-12-23 09:45:17

1樓:做而論道

8位二進位補碼能表示的數的範圍是-128到+127,並且不存在-128的原碼,只有-128的補碼為10000000。

如果-128 沒有原碼,那麼補碼是根椐什麼推出的呢???

求補碼,一般都是說「取反加一」。

其實,這只是乙個經驗公式而已,並非是補碼的定義。

補碼,實際上,是乙個「代替負數」的正數。

使用了補碼,計算機中就沒有負數了。

並且,也就沒有減法運算了,那麼,計算機中有乙個加法器,就能橫行天下了。

補碼(正數),怎麼能代替負數呢?

用 10 進位容易理解,下面看看 2 位數的計算:

25 + 99 = 一百) 24

只要你捨棄進位(一百=10^2),+99 就能代替-1 來用。

這個正數,就稱為「負數的補數」。

只有負數,才需要求補數。而正數,本身就是正數,不許再做變換。

計算公式: 補數 = 負數 + 10^n。

n 是補數的位數。

10^n,是 n 位數的計數週期。

日常所見,時針倒撥 3 小時,可以用正撥 9 小時代替。

在三角函式中,,也可以用代替。

這些數字之間的計算規律,都是一樣的。

都是:

代替負數的正數 = 負數 + 週期

計算機用二進位,補數,就改稱為:補碼。

8 位 2 進位數,計數週期是:2^8 = 256。

那麼:1 的補碼是:-1 + 256 = 255 = 1111 1111 (二進位)。

2 的補碼是:-2 + 256 = 254 = 1111 1110 (二進位)。

-128 的補碼,當然就是:128 = 1000 0000 (二進位)。

在此處,就解決了樓主的疑問。

由此,可推出補碼的定義式:

當 x >=0, [x ]補 = x; 零和正數不用變換。

當 x < 0, [x ]補 = x + 2^n。 n 是補碼的位數。

這是通用的公式,你可以在書上找到這種公式。

補碼,和原碼反碼都沒有關係。

還有:符號位,求反加。

一、符號位不變。。。亂七八糟的!

這些,都是數學不好的老外,百般無奈,才編造出來的。

不學也罷。

2樓:網友

補碼和原碼錶示法只是計算機中表示數值資料的兩種不同的方法而已。形式上,對於需要表示的乙個數,補碼可以通過將原碼取反加一後求得,但這並不表示補碼是因為原碼的存在而存在的。

對於8位二進位數,原碼錶示範圍為:-127到-0、+0到127。

補碼錶示範圍為-128到127。可以看到兩種表示方法所能表示的數的範圍雖然不一樣,但能表示的數的總個數是一樣的。

另外可以看到對10000000的數值位取反加一後,仍然是10000000。

看一下8位原碼的定義:

x]的原碼=2的7次方+x的自然二進位數。

而。x]的補碼=2的8次方-x的自然二進位數。

比較兩個定義式,就能發現:從兩種表示方法能表示的數來看,若只考慮不同的數,那麼補碼所能表示的數(不同的數)比原碼多乙個,那個多出來的數就是-128。

128是通過100000000-10000000得來的。

3樓:沙裡波特

自然界,只有乙個零,而原碼和反碼中,卻都有兩個零,顯然是不合理的。

補碼,就沒有這個毛病,這才是正確的表示方法。

所以,計算機中,只是使用補碼,根本就不用原碼反碼。

既然,它們都不存在,還學它們幹嘛呢?

討論來討論去,都是毫無意義的。

關於彙編裡資料(補碼)的儲存問題!

4樓:植羲席嘉悅

用組合語言程式設計,-10,或。

246,都是編譯成。

f6h,再儲存到計算機。

計算機,不管它是。

10,還是。

246,它就是《存著》而已。

這個數字,就等著你來編寫指令來處理。

你使用了無符號的資料處理方法,計算機就拿它當做246。

你使用了有符號的資料處理方法,計算機就拿它當做-10。

組合語言原碼、反碼、補碼,還有真值問題

5樓:網友

1、乙個數的真值是這個數原本表示的大小。二進位真值,就是真值的二進位表示。

比如-2,二進位真值就是-10b。

2、是的。[x]補+[y]補=[x+y]補嘛。

3、正數的補碼就是它的原碼;

負數的話,將補碼減1再按位取反能計算出原碼。

補碼按位取反加1也能計算出原碼。

兩種方法計算出來的結果相同。

比如:8位情況下,-2的補碼是1111 1110,用第一種方法:

減一:1111 1110 - 1 = 1111 1101取反:10000010—— 2

用第二種方法:

取反:1000 0001

加一:1000 0010—— 2

6樓:網友

1)二進位真值就是乙個數的2進製表示;比如127的2進位真值就是1111111;

2)題目的意思是用補碼計算這幾個數;然後再把補碼轉換整原碼;

3)知道補碼求原碼 : 將補碼減1後然後按位取反就可以了;

比如10的2進位原碼是00001010;那麼補碼是11110110;將補碼減1後的到00000101;在按位取反得到1010

7樓:做而論道

用 8 位補碼完成下列運算,用二進位真值的格式給出運算結果。

1、二進位的真值是什麼?

就是把結果,寫成二進位格式。(其實,「真值」,是不可理解的黑話。不應該出現的)

2、是不是把數字都轉成補碼再進行加減,最後的結果也用補碼錶示?

對。

最後的結果,用二進位格式表示。3、知道乙個數的補碼,怎麼求出他的二進位原碼。

不用求原碼,你寫出結果的二進位即可。

例如:-100-(-120) =100 + 120 = 20[-100]補 =

-相加---

結果,十進位是:20。

其二進位格式,就是:1 0100。

組合語言補碼問題

8樓:做而論道

[x]補=01000011

y]補=01000100

負數加負數,得出了正數,這就判斷出是溢位了。

結果 10000111,是不是 -121 ?已經不用關心了。

溢位了,結果就已經肯定是錯誤的了。

追問:10000111的補碼就是-121如何算出來的?

問錯了。應該問:-121的補碼就是10000111,如何算出來的?

慢慢算吧,這不是難事,

9樓:網友

10000111的補碼就是-121,當x+y的值超過表示範圍時,cpu會置標誌暫存器的of為1,這就表示溢位了,這裡就是因為正確結果135大於了127 ,超出範圍所以溢位了。

10樓:阿耘信天華

基本想法正確,但是有兩個問題:

1.不同的表示法不能運算。

2.以8位二進位碼為例。

94的補嗎顯然不是22h,而是5eh

movah,22h

movbh,a0h

subah,bh

運算後cf=1,of=1

視為無符號數為:

34-160應得-126,實得130,結果錯誤視為有符號數為:

34-(-96)應得130,實得-126,結果錯誤。

關於浮力的疑問,關於浮力的乙個疑問。

你把蠟塊熔化成蠟液滴在燒杯底部,再倒入水,凝固的蠟不會上浮,但是蠟的密度小於水,應該上浮的,它沒有上浮,所以沒有受浮力。阿基公尺德原理是 侵入或部分浸入液體的物體 你提出的那個物體 和我說的這個蠟 已經和容器成一體了 就不再是 浸入或部分浸入液體的物體 了。你想一想,海底的山脈也受浮力麼?所以沒有浮...

關於虛擬機器的疑問,關於虛擬機器的乙個疑問

你說的沒錯,虛擬機器的真正應用環境正是一機虛擬多機。擴來說,真正商業化的虛擬環境也並非一機虛擬多機,而是多機虛擬多機。也就是由多個物理伺服器,把他們的硬體資源 硬碟 cpu 記憶體等 集合起來統一管理,組成乙個虛擬資源池,然後執行虛擬化軟體,由這個資源池中的硬體資源虛擬出更多的虛擬伺服器來。一般成熟...

籃球的疑問,關於籃球的乙個問題

建議樓主去打得分 或者小前,因為到大學去的話180以上的個子完全可以打前鋒 不知道你垂直彈跳多少,建議多練練爆發。運球時必須要練的,最好能左右手通吃。急停跳投,籃下推薦小勾手,有身體對抗的話在平時打球中完全可以強退進內線,強力推薦樓主多練下半截籃,和籃下的腳步。後衛 反應力你可以玩些要反應裡的遊戲 ...