補碼10000000為什麼可以表示 128?

2021-07-31 06:27:45 字數 571 閱讀 9808

另外,什麼是補碼?補碼的設計意義是什麼?

讓我們忘記公式,來看看作者的回答。

很多人並不理解補碼。補碼就是同餘啊。1000000是正128你知道吧,正負128模256是同餘的。加減乘可以直接算也是同餘的定理決定的,而不是湊出來的巧合,哪可能湊出這種東西?

8位只能表示256個數,0到255,但我還想表示一些負數怎麼辦呢?就用與該負數同餘的正數來表示唄。-1=255,-2=254,等等。

建議脫離算數的思維方式,這其實就是乙個環。模任何乙個正整數(如256),可以把所有整數分類,比如模256可分256類,0 256 -256…是一類(餘0類),1 257 -255…是一類(餘1類),等等,這256類可看作環的元素,你看-128和128是同乙個類裡的(餘128類),用乙個代表另乙個罷了。補碼和普通的unsigned integers都是在每類中選乙個數,unsigned integers選0到255,補碼表示的有符號整數選-128到127,都是乙個數恰好對應乙個類。

當你明白這一切後,補碼就是順理成章的事。

練習:設計用8位二進位制數表示13至268這256個數的方案。要求作加減乘運算的時候,可以直接把編碼當正整數算,能得到正確結果。

為什麼要用補碼

在探求為何機器要使用補碼之前,讓我們先了解原碼,反碼和補碼的概念.對於乙個數,計算機要使用一定的編碼方式進行儲存.原碼,反碼,補碼是機器儲存乙個具體數字的編碼方式.原碼就是符號位加上真值的絕對值,即用第一位表示符號,其餘位表示值.比如如果是8位二進位制 1 原 0000 0001 1 原 1000 ...

為什麼要用補碼?

我們都知道計算機中的負數是用補碼來表示的,而負數的補碼是原碼符號位不變,其他位按位取反再加一。但是為什麼必須這樣?為什麼非要取反再 1?這個定義是怎麼來的?首先我們用我們熟悉的十進位制來思考問題,假設現在我們只考慮兩位數字的運算,比如56 28 56 28,這裡如果作正常的減法運算,就需要借位,也就...

為什麼要引入補碼

現在我們知道了計算機可以有三種編碼方式表示乙個數.對於正數因為三種編碼方式的結果都相同,所以不需要過多解釋 原碼 1 0000 0001 反碼 1 0000 0001 補碼 1 0000 0001 為了解決原碼做減法的問題,出現了反碼 1 1 1 1 0000 0001 原 1000 0001 原 ...