原碼 反碼 補碼詳解

2021-08-31 13:44:24 字數 1329 閱讀 6867

一. 機器數和真值

1、機器數

任何乙個數在計算機中都是以二進位制形式表示, 叫做機器數。機器數是帶符號的,在計算機用乙個數的最高位存放的是符號, 正數為0, 負數為1.

例:十進位制中的數 +5,計算機字長為8位,轉換成二進位制就是00000101。如果是 -5,就是 10000101 。

那麼,這裡的 00000101和 10000101 就是機器數。

2、真值

因為第一位是符號位,所以機器數的形式值就不等於真正的數值。例如上面的有符號數 00000101,其最高位1代表負,其真正數值是 -5 而不是形式值133。所以,為區別起見,將帶符號位的機器數對應的真正數值稱為機器數的真值。

例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1

二. 原碼, 反碼, 補碼的基礎概念和計算方法.

1、原碼

原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其餘位表示值. 比如如果是8位二進位制:

[+3]原 = 0000 0011

[-3]原 = 1000 0011

第一位是符號位. 因為第一位是符號位。

原碼是人們正常中用的最多的表示方式.

2、反碼

反碼的表示方法是:

正數的反碼是其本身

負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反.       

[+3] = [00000011]原 = [00000011]反

[-3] = [10000011]原 = [11111100]反

如果乙個反碼表示的是負數, 建議最好先將其轉換成原碼之後再計算.

3.補碼00000101

補碼的表示方法是:

正數的補碼就是其本身

負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)

[+3] = [00000011]原 = [00000011]反 = [00000011]補

[-3] = [10000011]原 = [11111100]反 = [11111101]補

對於負數,還是建議先轉換成原碼在計算其數值.

計算機為了計算容易便把負數以補碼的方式儲存,計算也是以補碼的形式進行計算.

三、負數的按位與運算

按位與運算是按照資料的內部二進位制形式進行運算的。若是兩個負數,則是按二進位制補碼形式進行按位與。

例:

#include main()

程式執行結果為:

原碼 反碼 補碼詳解

在求解一些問題的時候,難免會涉及到補碼,特別是負數,它是以正數的補碼形式儲存在計算機中,有時候需要將補碼轉換成原碼,要是不理解其中的關係就很難下手。下面先講一下機器數和真值,首先要理解什麼是機器數,它是數字在計算機中的二進位制表示形式,而真值則是字面上理解的意思。舉個例子,當機器字長為8位時,3的機...

原碼,反碼,補碼,詳解

本篇文章講解了計算機的原碼,反碼和補碼.並且進行了深入探求了為何要使用反碼和補碼,以及更進一步的論證了為何可以用反碼,補碼的加法計算原碼的減法.論證部分如有不對的地方請各位牛人幫忙指正 希望本文對大家學習計算機基礎有所幫助 一.機器數和真值 在學習原碼,反碼和補碼之前,需要先了解機器數和真值的概念....

原碼,補碼,反碼詳解

首先來記住規則 原碼到補碼的計算是 原碼的符號位不變,其餘位按位取反後加1.原碼到反碼的計算是 原碼的符號位不變,其餘位按位去反 然後來看一下原碼 反碼和補碼的定義 原碼就是符號位加上真值的絕對值,即用第一位表示符號,其餘位表示值。比如如果是8位二進位制 1 原 0000 0001 1 原 1000...