計算機基礎知識 補數的引入
補數是為了解決+0和-0在計算機中表示不唯一的問題而引入的;
機器數 真值
一個數在機內的表達形式被稱為"機器數",而它代表的數值稱為此機器數的"真值"
一個數在計算機內是采用二進制編碼表示的,數有正負之分,如何在計算機中表示符號?
0 表示正 1 表示負,符號位放在最高位。
例如8位二進制數 A =(+1011011) 在機器中可以表示為 01011011
B=(-1011011)在機器中可以表示為11011011
最左邊代表符號位和數字本身一起作為一個數
符號數字化之后計算機可以方便地識別和表示數字符號了。
為了改進符號數的運算和簡化運算其的硬件結構,人們研究了符號數的多種二進制編碼方法,其本質上都是對負數表示的不同編碼
原碼
符號 與 數的絕對值 一起編碼稱為 原碼
如 X=+0101011 [X]原=00101011
X=-0101011 [X]原=10101011
這里[X]原 被稱為機器數 X被稱為機器數的真值
X=-0.1011 [X]原=1.1011
X=+0.1011 [X]原=0.1011
采用原碼表示法好處是簡單直觀,與指針轉換方便,但缺點是 零的表示不唯一 ,因為:
[+0]原=0 000 0000
[-0]原= 1 000 0000
補碼
模數的概念:
模數從物意義上來講,是某種計量容器。例如:鐘表,模數是12。鐘表計時方式是 到達12就從零開始(扔掉一個12),這在數學上是 取模(取余) 運算(mod)。
在C++中%是除法求余數的算術運算符。 如 14%12 = 2。
如果現在準確的時間是6點整 而你的手表是8點整,那么如何才能將時間調整到6點整呢?向后撥2小時,或向前撥10小時。效果是一樣的,即:
8-2=6
(8+10)%12=6
故在模數系統中 8-2 = 8+10 (mod 12)
上式成立 是因為 2與10對模數12是互為補數的。(2+10=12)
對于負整數求補碼快捷方式:用模減去這個數的絕對值 得到的就是補數
如 -1 的8位二進制補碼 2的8次方 減去 1 = 255 255的二進制編碼即 八個一 1111 1111
如 -0 的8位二進制補碼 256-0=256 二進制編碼即 1后面八個0 -- 1 0000 0000 因為要八位2進制 故補碼為
0000 0000
如 -128的8位二進制補碼 256-128=128 二進制編碼即 1后面七個0 1000 0000

浙公網安備 33010602011771號