導航:首頁 > 源碼編譯 > 帶求補器的源碼

帶求補器的源碼

發布時間:2025-07-09 21:26:48

❶ 原碼反碼補碼的意義

問題一:原碼、補碼和反碼的概念??? 數在計算機中是以二進制形式表示的。
數分為有符號數和無符號數。
原碼、反碼、補碼都是有符號定點數的表示方法。
一個有符號定點數的最高位為符號位,0是正,1是副。
以下都以8位整數為例,
原碼就是這個數本身的二進制形式。
例如
0000001 就是+1
1000001 就是-1
正數的反碼和補碼都是和原碼相同。
負數的反碼是將其原碼除符號位之外的各位求反
[-3]反=[10000011]反=11111100
負數的補碼是將其原碼除符號位之外的各位求反之後在末位再加1。
[-3]補=[10000011]補=11111101
一個數和它的補碼是可逆的。
為什麼要設立補碼呢?
第一是為了能讓計算機執行減法:
[a-b]補=a補+(-b)補
第二個原因是為了統一正0和負0
正零:00000000
負零:10000000
這兩個數其實都是0,但他們的原碼卻有不同的表示。
但是他們的補碼是一樣的,都是00000000
特別注意,如果+1之後有進位的,要一直往前進位,包括符號位!(這和反碼是不同的!)
[10000000]補
=[10000000]反+1
=11111111+1
=(1)00000000
=00000000(最高位溢出了,符號位變成了0)
有人會問
10000000這個補碼表示的哪個數的補碼呢?
其實這是一個規定,這個數表示的是-128
所以n位補碼能表示的范圍是
-2^(n-1)到2^(n-1)-1
比n位原碼能表示的數多一個
又例:
1011
原碼:01011
反碼:01011 正數時,反碼=原碼
補碼:01011 正數時,補碼=原碼
-1011
原碼:11011
反碼:10100 負數時,反碼為原碼取反
補碼:10101 負數時,補碼為原碼取反+1
0.1101
原碼:0.1101
反碼:0.1101 正數時,反碼=原碼
補碼:0.1101 正數時,補碼=原碼
-0.1101
原碼:1.1101
反碼:1.0010 負數時,反碼為原碼取反
補碼:1.0011 負數時,補碼為原碼取反+1
總結:
在計算機內,定點數有3種表示法:原碼、反碼和補碼
所謂原碼就是前面所介紹的二進制定點表示法,即最高位為符號位,「0」表示正,「1」表示負,其餘位表示數值的大小。
反碼表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
補碼表示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。
1、原碼、反碼和補碼的表示方法
(1) 原碼:在數值前直接加一符號位的表示法。
例如: 符號位 數值位
[+7]原= 0 0000111 B
[-7]原= 1 0000111 B
注意:a. 數0的原碼有兩種形式:
[+0]原=00000000B [-0]原=10000000B
b. 8位二進制原碼的表示範圍:-127~+127
2)反碼:
正數:正數的反碼與原碼相同。
負數:負數的反碼,符號位為「1」,數值部分按位取反。
......>>

問題二:補碼與反碼有什麼用處? 在現在的計算機中,用補碼表示有符號數,其計算方法,和無符號數的計算方法相同,所以可以共用一個運算器。
因此,在計算機里弧,通用的是補碼。
原碼和反碼,都是用於求補碼的中間過程,一般都是寫在紙面上,並不存入計算機。

問題三:計算機的原碼,反碼,補碼是怎麼回事?可以舉例說明嗎? 計算機以二進制補碼存儲數據
以16位機器為例:
比如83的二進制碼為:0000 0000 0101 0011
由於正數的源碼、反嗎、補碼,上面的既是源碼,也是反碼和補碼
下面通過負數講解源碼、反碼、補碼之間的關系
以-83為例
先求出-83絕對值的源碼:0000 0000 0101 0011
計算機區分正負數通過判斷最高位符號位,1為負數、0為正數
那麼-83的源碼為:1000 0000 0101 0011
反碼在源碼基礎上按位取反,符號位不變:1111 1111 1010 1100
補碼在反碼的基礎上加1:111場 1111 1010 1101
補碼轉源碼:補碼基礎上按位取反後加一,符號位在取反時不變,加一時最高位符號位有進位的,進位忽略
取反:1000 0000 0101 0010
加1:1000 0000 0101 0011

問題四:原碼,反碼和補碼表示的規則分別是什麼 一. 機器數和真值
在學習原碼, 反碼和補碼之前, 需要先了解機器數和真值的概念.
1、機器數
一個數在計算機中的二進製表示形式, 叫做這個數的機器數。機器數是帶符號的,在計算機用一個數的最高位存放符號, 正數為0, 負數為1.
比如,十進制中的數 +3 ,計算機字長為8位,轉換成二進制就是00000011。如果是 -3 ,就是 10000011 。
那麼,這里的 00000011 和 10000011 就是機器數。
2、真值

為第一位是符號位,所以機器數的形式值就不等於真正的數值。例如上面的有符號數 10000011,其最高位1代表負,其真正數值是 -3
而不是形式值131(10000011轉換成十進制等於131)。所以,為區別起見,將帶符號位的機器數對應的真正數值稱為機器數的真值。
例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = C000 0001 = C1
二. 原碼, 反碼, 補碼的基礎概念和計算方法.
在探求為何機器要使用補碼之前, 讓我們先了解原碼, 反碼和補碼的概念.對於一個數, 計算機要使用一定的編碼方式進行存儲. 原碼, 反碼, 補碼是機器存儲一個具體數字的編碼方式.
1. 原碼
原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其餘位表示值. 比如如果是8位二進制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符號位. 因為第一位是符號位, 所以8位二進制數的取值范圍就是:
[1111 1111 , 0111 1111]

[-127 , 127]
原碼是人腦最容易理解和計算的表示方式.
2. 反碼
反碼的表示方法是:
正數的反碼是其本身
負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可見如果一個反碼表示的是負數, 人腦無法直觀的看出來它的數值. 通常要將其轉換成原碼再計算.
3. 補碼
補碼的表示方法是:
正數的補碼就是其本身
負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]補
[-1] = [10000001]原 = [11111110]反 = [11111111]補
對於負數, 補碼表示方式也是人腦無法直觀看出其數值的. 通常也需要轉換成原碼在計算其數值.

問題五:原碼反碼和補碼區別 原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其餘位表示值,如
[+1]原 = 0000 0001
[-1]原 = 1000 0001
正數的反碼是其本身
負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
補碼的表示方法是:
正數的補碼就是其本身
負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]補
[-1] = [10000001]原 = [11111110]反 = [11111111]補
正數的源碼,反碼,補碼都一樣

問題六:相對於原碼和反碼,補碼表示法有什麼優點和缺點 原碼表示法是機器數的一種簡單的表示法。其符號位用0表示正號,用:表示負號,數值一般用二進制形式表示。
機器數的反碼可由原碼得到。如果機器數是正數,則該機器數的反碼與原碼一樣;如果機器數是負數,則該機器數的反碼是對它的原碼(符號位除外)各位取反而得到的。
機器數的補碼可由原碼得到。如果機器數是正數,則該機器數的補碼與原碼一樣;如果機器數是負數,則該機器數的補碼是對它的原碼(除符號位外)各位取反,並在未位加1而得到的。
如果是為了考試,死記即可。但我總想搞清楚為什麼計算機裡面的數要這樣子表達?意義何在?-128的補碼為什麼是10000000?為什麼補碼有這么奇怪的運算規則?計算機算減法的時候都需要從源碼到補碼的計算嗎?
思路
google了一下,看到了這樣一篇文章,注意到文中關於補碼來歷的描述,可以總結如下:
計算機裡面,只有加法器,沒有減法器,所有的減法運算,都必須用加法進行。
用補數代替原數,可把減法轉變為加法。出現的進位就是模,此時的進位,就應該忽略不計。
二進制下,有多少位數參加運算,模就是在 1 的後面加上多少個 0。
補碼就是按照這個要求來定義的:正數不變,負數即用模減去絕對值。
補充解釋一下「模」的概念(不準確):
考慮時鍾上時間的計算,假設現在時針指向數字3,若問「6小時前時針指向的數字是幾」,則可以:
1. 將時針逆時針撥動6格。
2. 將時針順時針撥動12 - 6 = 6格。
兩者的結果是一樣的。這里稱12為「模」。
故有 3時 - 6個小時 = 3時 + (12 - 6個小時),這里可以看到將減法轉換成加法的過程,即「加上模減去絕對值的差」。
所以,假設模是10,有效位數為1,當我們計算 9 - 7 的時候:
9 - 7 => 9 + (10 - 7) = 12,去掉最高的位後,得到2,這是正確的結果。
作者的意思是說,計算機裡面所有數都以補碼形式保存,加減運算都是補碼之間的加法運算。然後作者提出了一個我之前沒聽過的觀點:
補數 和 補碼的定義式 裡面,根本就沒有什麼符號位。這最高位的1、0是自然出現的,並不是由人來規定的。
的確,符號位在補碼運算裡面是「模」,本身並不帶符號的意義。因為計算機將加法轉換成加上一個「負數」,而負數又以補碼的形式表現。補碼比源碼多一位,從這多出來的一位可以推斷出原來數字的正負號,所以成為了符號位。也可以這樣認為,留出一位(不全部占滿)的原因是要用「模」來表示正負數。
也就是說,不是特意留出一個符號位,用1和0來表示正負號。而是補碼運算可以用最高位來表示正負,所以符號位誕生了。
那麼為什麼-128的補碼是10000000?可以這樣理解。-128是一個負數,所以它的補碼是它的「模」減去它的絕對值,即:
100000000 - 10000000 = 10000000
那麼為什麼負數補碼等於源碼的反碼加一呢?可以這樣推導:
100000000 - 10000000
= (11111111 + 00000001) - 10000000
= 11111111 - 10000000 + 1
= 01111111 + 1 反碼加一
= 10000000
由此我們得知,在計算機裡面所有的數字都以補碼形式存儲。127存成01111111,-127存成11111111,算減法就變成算加法了,盡管你看到的是「-」號。...>>

問題七:c語言中的原碼,反碼,補碼有什麼作用,是用來做什麼的 計算機中的整數類都是用補碼來存儲的。
而C語言中不需要關心原反補碼!

❷ 負數的補碼怎麼求

正數的補碼,是其本身。

負數的補碼,就用它的正數,減一取反,即可得到補碼。

如,已知:+9補碼是:00001001。

下面求-9補碼:

先減一:00001001-1=00001000;

再取反:11110111。

所以有:-9補碼=11110111。

這不就完了嗎?

簡不簡單?意不意外?

原碼反碼符號位,討論這些垃圾幹嘛?

不都是騙人的嗎?

❸ +0或者-0的源碼、反碼、補碼

[+0]原碼=0000 0000, [-0]原碼=1000 0000

[+0]反碼=0000 0000, [-0]反碼=1111 1111

[+0]補碼=0000 0000, [-0]補碼=0000 0000

你會發現,+0和-0的補碼是一樣的。即 0的補碼只有一種表示。

這里解釋一下[-0]補碼是怎麼得來的。

負數的補碼就是反碼整體加一。符號位上的進位舍棄。(所以,舍棄了符號位的補碼的第一位是數值位,不是符號位,符號位舍棄了)

另外解釋一下原碼符號位和補碼符號位的關系,補碼的符號位不是保持原碼的第一位不變,而是 符號位不變,[-0]反碼的第一個1是符號位,尾數中的7個1是數值位,尾數加一後,數值位產生了進位,1111 1111+1=1 0000 0000(計算補碼的過程中,並不是先保證第一位不變,而是保證符號位不變,保證補碼規則是反碼整體加一)。

所以,補碼能表示的數的個數中,比原碼反碼少了一個,所以補碼可以多表示一個真值為-128的數。

但是,多表示的這個數-128比較特殊,只有原碼和補碼,沒有反碼。

-128的補碼是1000 0000。128的補碼為什麼是1000 0000。因為8位二進制的原值表達范圍為:-127至127,共有256個組合序列 0000 0000 至1111 1111 。+128的原值在8位中是表達不出來的。

(3)帶求補器的源碼擴展閱讀:

數值在計算機中是以補碼的方式存儲的,在探求為何計算機要使用補碼之前, 讓我們先了解原碼, 反碼和補碼的概念。

對於一個數, 計算機要使用一定的編碼方式進行存儲。 原碼, 反碼, 補碼是計算機存儲一個具體數字的編碼方式。

一個數在計算機中的二進製表示形式, 叫做這個數的機器數。

機器數是帶符號的,在計算機用一個數的最高位存放符號, 正數為0, 負數為1。比如,十進制中的數 +2 ,計算機字長為8位,轉換成二進制就是[00000010]。如果是 -2 ,就是 [10000010] 。

因為第一位是符號位,所以機器數的形式值就不等於真正的數值。例如上面的有符號數 [10000010],其最高位1代表負,其真正數值是 -2 而不是形式值130([10000010]轉換成十進制等於130)。

所以將帶符號位的機器數對應的真正數值稱為機器數的真值。

參考資料:

原碼_網路

反碼_網路

補碼_網路

❹ -64的源碼反碼補碼是什麼

-64,有符號數,第一位為符號位所以,

原碼:

11000000,二進制1000000轉換成10進制為64

反碼:

正數的反碼與原碼相同,負數的反碼,符號位不變,其餘各位按位取反,所以反碼為:

10111111

補碼:

正數的補碼與原碼相同,負數的補碼,符號位不變,其餘各位按位取反再加1,所以反碼為:

10111111+1=11000000

計算機里,負數的是以補碼形式存放的,WIN7以上的系統自帶的計算器就可以查看負數的補碼。打開計算器,切換到程序員模式,然後輸入-64,可以看到下面的補碼,如圖:

注意紅框裡面的數字即是-64的補碼,如果是負數,前面的所有位數都是1

閱讀全文

與帶求補器的源碼相關的資料

熱點內容
qq可以加密密碼 瀏覽:852
網上認證無法連接網站伺服器地址 瀏覽:918
java資料庫建表 瀏覽:168
linux本地埠 瀏覽:36
郵票目錄pdf 瀏覽:378
解壓筆真的有用嗎 瀏覽:538
plc語法和編程語句 瀏覽:115
南航app學生旅行產品在哪裡 瀏覽:240
漫畫pdf網盤 瀏覽:495
手機pdf字太小 瀏覽:892
解壓縮安裝圖解 瀏覽:257
安卓如何查看運行伺服器 瀏覽:681
土質學pdf 瀏覽:993
郵箱收發伺服器地址 瀏覽:143
web前端和python 瀏覽:639
定址演算法 瀏覽:783
車床編程ijk之間的關系 瀏覽:493
安卓什麼app可以訪問smb 瀏覽:205
籠統概括程序員 瀏覽:853
linuxfdiskdf 瀏覽:299