計算機中為什麼可以用數值表示正負數

時間 2021-06-16 19:41:17

1樓:伊尹

首先,注意到,計算機運算的物件只能是二進位制,它並不區分正負數,或者說它總是把二進位制看作正數。所以我們總是要先把整數表示成二進位制,計算機才可以進行運算。

既然計算機它總是把二進位制看作正數,那麼我們如何表示負數?

答案就是,我們自己規定了一套規則把負數轉化成二進位制。這個規則就是,使用乙個數的補碼表示這個數的負數。

補碼:如果兩個二進位制的和是2^w,則我們稱之為互為補碼。(w是整數的二進位制位數)

因為這樣的規定,減法運算實際上變成了取補運算。

下面是證明:

那麼為什麼,要這麼規定呢?因為這麼規定是可以得到正確的結果的,這他媽不是廢話嗎,別急,下面我們來看看到底怎麼得到正確結果的。

假設乙個數x,它的負數是y,我們只要能證明,通過使用補碼能計算得到x + y = 0,那麼我們就證明了補碼運算的正確。

證明:因為,根據規定,負數的二進位制就是正數的補碼,

所以可以得到y = 2^w - x。

那麼,x + y = x + 2^w - x = 2^w。(結果並不是0啊,別急接著往下證明)

又因為,w位的二進位制,2^w是表示不了的,因為它是w+1位的二進位制,1後面跟w個0,這種情況下計算機會捨棄最高位,只保留低w位,2^w的低w位就是0。

所以,x + y = 0。

綜上,補碼正確性得到證明。

2樓:[已重置]

取決於你怎麼去表示signed number

第一種是 One's complement

簡單來說就是用最高位來表示正負,可以表示區間內任何整數

舉例:對於一段3bit長的二進位制字元 , ,可以表示-3到3之間的任何整數

000 -> 0

001 -> 1

010 -> 2

011 -> 3

100 -> -0

101 -> -1

110 -> -2

111 -> -3

如果需要正負號調換的話,只需要將最高位取反即可,在C中我們可以// if we assume a is a 3 bit unsigned integera^=

1<<2;

//101

->001(-3

to3)One's complement 的優點在於簡單,缺點就是000和100同時表達0所以浪費了乙個位置。

第二種是Two's complement

同樣用最高位表示正負,但是-0 被 替代,所以可以表示的區間為

舉例,同樣的3bit長的二進位制字元,用Two's complement 可以表示為

000 -> 0

001 -> 1

010 -> 2

011 -> 3

100 -> -4

101 -> -3

110 -> -2

111 -> -1

如果需要取反,將整個二進位制字串取反之後+1

// if we assume a is a 3 bit unsigned integera=

~a+1

;//101->

010->

011(-3

to3)可以這樣做的原因可以參照下圖

3樓:燧石

樓主這裡應該指的是具有固定位數的二進位制整型數的加減法計算,而不涉及多精度、任意精度或其它進製的整型數,或浮點數的計算吧。

計算機一般使用8的倍數,例如8、16、32、64這樣的固定位數來表示整型數。對於占有n位的整型數,它可能有2^n個不同的取值。具體來說,對無符號整型,取值範圍為[0, 2^n),對有符號整型,取值範圍為[-2^(n-1), 2^(n-1))。

有符號整型和無符號整型,在表示正數或0時,都用其二進位制表示;而有符號整型在表示負數時,使用其補碼表示:對於負整數-m,其補碼的二進位制結果為2^n-m。顯然負數補碼的二進位制大於所有整數的二進位制,且最高位為1。

即是對於二進位制p,如果p<2^(n-1),被認為是0或整數;對p>=2^(n-1),被認為是負數2^n-p。

例如對8位無符號整數,其二進位制範圍[0, 256)對應值的範圍為[0, 256),對8位有符號整數,其二進位制範圍[0, 128)對應值範圍[0, 128),而二進位制範圍[128, 256)對應[-128, 0)。

而計算機上對n位數的加法計算使用的是模2^n加法:a+b實際上被解釋為(a+b)%2^n。

所以兩個正數a和b的差a-b,可認為a+(-b),在計算機上的運算為[a+(2^n-b)]%2^n=[2^n+(a-b)]%2^n,當a>=b時,結果為a-b;當a<b時,二進位制結果為[2^n-(b-a)],是負數-(b-a)的補碼,結果為-(b-a)或-a-b。

乙個負數-a和乙個正數b之差-a-b,可認為-a+(-b),在計算機上運算為[(2^n-a)+(2^n-b)]%2^n=[2^n-(a+b)]%2^n,當(a+b)<=2^(n-1)時,被認為是-(a+b)的補碼,結果為-(a+b);,當(a+b)>2^(n-1)時,此時將被解釋為正數2^n-(a+b),計算結果溢位,結果不正確。

對於有符號整型,兩個正數a和b的和可能得到乙個負數:當a+b>=2^(n-1)時,結果為(a+b)%2^n=[2^n-(2^n-(a+b))],被解釋為負數-[2^n-(a+b)]或a+b-2^n。

希望以上答案對你有幫助。

漢字在計算機中的表示方式有哪些?

北極 寫在前面 漢字在計算機內部用什麼編碼,沒有任何限制,純粹是軟體開發人員自己決定的,如果開發人員自己發明一套編碼,也沒有問題。主流作業系統都支援多種模式的編碼。另外,機器內碼不是乙個準確的概念,內碼泛指一切二進位制編碼,當然,不排除某些教材寫的不準確或者年代比較早,弄錯了這個概念。1.漢字在計算...

計算機中字型的原理是什麼?

Dictionaryphile 作業系統 計算機組成原理 資訊處理 etc.Windows 10 作業系統,C Windows System32 資料夾下有 charmap.exe 同樣的 U 0030 Digit Zero 選擇不同字型,我們看到的是穿著不同外衣的 0 甚至可能不是 0 計算機系統...

計算機中記憶體3B是什麼?

張玉明 計算機是2進製的,只能識別0和1 0或1稱為乙個二進位制位 0000 0000 8個2進製位稱為b,叫位元組 0000 0000 0000 0000稱為字,1字 2位元組 1024 0000 0000 1kb,表示1024個位元組 1024 1kb 1mb,表示個1024 1024個位元組 ...