當前位置:首頁 » 操作系統 » 源碼到真值

源碼到真值

發布時間: 2023-09-27 12:36:26

❶ 機器數、真值、原碼、反碼是什麼意思啊

1、機器數

一個數在計算機中的二進製表示形式, 叫做這個數的機器數。機器數是帶符號的,在計算機用一個數的最高位存放符號, 正數0,負數為1。12

比如,十進制中的數 +3 ,計算機字長為8位,轉換成二進制就是0000 0011。如果是 -3 ,就是 1111 1101 。那麼,這里的 00000011 和 1111 1101 就是機器數。 機器數包含了符號和數值部分。

2、真值

因為第一位是符號位,所以機器數的形式值就不能很好的表示真正的數值。例如上面的有符號數 1111 1101,其最高位1代表負,其真正數值是
-3 而不是形肢寬棚式值253(1111
1101按無符號整數轉換成十進制等於253)。所以,為區別起見歷則,將帶符號位的機器數對應的真正數值稱為機器數的真值。巧旅
例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –0111 1111 = –127;這里所說的比如-3二進制代碼為10000011,就是我們計算機裡面對-3表示的源碼。下面介紹源碼
首先說明一點
在計算機內,有符號數有3種表示法:原碼、反碼和補碼。

3、原碼

原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其餘位表示值. 比如如果是8位二進制
[+1]原 = 0000 0001
[-1]原 = 1000 0001
因為第一位是符號位, 所以若是8位二進制數,其取值范圍就是:
[1111 1111 , 0111 1111]
即[-127 , 127]
原碼是人腦最容易理解和計算的表示方式。

4 、反碼

反碼表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
[+1] = [ 00000001 ]原碼 = [ 00000001 ]反碼;
[-1] = [ 10000001 ]原碼 = [ 11111110 ]反碼;
可見如果一個反碼表示的是負數, 人腦無法直觀的看出來它的數值. 通常要將其轉換成原碼再計算。

什麼是二進制的補碼?

註明:正數的補碼與負數的補碼一致,負數的補碼符號位為1,這位1即是符號位也是數值位,然後加1

補碼借鑒的模概念,雖然理解起來有點晦澀難懂。可以跳過

模的概念:把一個計量單位稱之為模或模數。例如,時鍾是以12進制進行計數循環的,即以12為模。
在時鍾上,時針加上(正撥)12的整數位或減去(反撥)12的整數位,時針的位置不變。14點鍾在捨去模12後,成為(下午)2點鍾(14=14-12=2)。從0點出發逆時針撥10格即減去10小時,也可看成從0點出發順時針撥2格(加上2小時),即2點(0-10=-10=-10+12=2)。因此,在模12的前提下,-10可映射為+2。由此可見,對於一個模數為12的循環系統來說,加2和減10的效果是一樣的;因此,在以12為模的系統中,凡是減10的運算都可以用加2來代替,這就把減法問題轉化成加法問題了(註:計算機的硬體結構中只有加法器,所以大部分的運算都必須最終轉換為加法)。10和2對模12而言互為補數。同理,計算機的運算部件與寄存器都有一定字長的限制(假設字長為16),因此它的運算也是一種模運算。當計數器計滿16位也就是65536個數後會產生溢出,又從頭開始計數。產生溢出的量就是計數器的模,顯然,16位二進制數,它的模數為2^16=65536。在計算中,兩個互補的數稱為「補碼」。比如一個有符號8位的數可以表示256個數據,最大數是0
1 1 1 1 1 1 1(+127),最小數1 0 0 0 0 0 0 0
(-128);那麼第255個數據,加2和減254都是一樣的效果得出的結果是第一個數據
,所以2和254是一樣的效果。對於255來說2和254是互補的數。
求一個正數對應補碼是一種數值的轉換方法,要分二步完成:
第一步,每一個二進制位都取相反值,即取得反碼;0變成1,1變成0。比如,00001000的反碼就是11110111。
第二步,將上一步得到的反碼加1。11110111就變成11111000。所以,00001000的二進制補碼就是11111000。也就是說,-8在計算機(8位機)中就是用11111000表示。
不知道你怎麼看,反正我覺得很奇怪,為什麼要採用這么麻煩的方式表示負數,更直覺的方式難道不好嗎?

二進制補碼的好處

首先,要明確一點。計算機內部用什麼方式表示負數,其實是無所謂的。只要能夠保持一一對應的關系,就可以用任意方式表示負數。所以,既然可以任意選擇,那麼理應選擇一種用的爽直觀方便的方式。
二進制的補碼就是最方便的方式。它的便利體現在,所有的加法運算可以使用同一種電路完成。
還是以-8作為例子。假定有兩種表示方法。一種是直覺表示法,即10001000;另一種是2的補碼表示法,即11111000。請問哪一種表示法在加法運算中更方便?隨便寫一個計算式,16
+ (-8) = ?16的二進製表示是 00010000,所以用直覺表示法,加法就要寫成:
00010000
+10001000原碼形式-8
---------
10011000
可以看到,如果按照正常的加法規則,就會得到10011000的結果,轉成十進制就是-24。顯然,這是錯誤的答案。也就是說,在這種情況下,正常的加法規則不適用於正數與負數的加法,因此必須制定兩套運算規則,一套用於正數加正數,還有一套用於正數加負數。從電路上說,就是必須為加法運算做兩種電路。所以用原碼表示負數是不行的。
現在,再來看二進制的補碼表示法。
00010000
+11111000補碼形式-8
---------
100001000
可以看到,按照正常的加法規則,得到的結果是100001000。注意,這是一個9位的二進制數。我們已經假定這是一台8位機,因此最高的第9位是一個溢出位,會被自動捨去。所以,結果就變成了00001000,轉成十進制正好是8,也就是16 + (-8) 的正確答案。這說明了,2的補碼表示法可以將加法運算規則,擴展到整個整數集,從而用一套電路就可以實現全部整數的加法。

二進制補碼的本質,本質是用來表示負整數的

在回答二進制補碼為什麼能正確實現加法運算之前,我們先看看它的本質,也就是那兩個求補碼步驟的轉換方法是怎麼來的。下面描述了一個正數怎麼求它對應負數在計算機的表達方式。比如128,正數為10000000,但是驚奇的發現-128也是10000000。但是這里由於屬於數據類型的限定,第八位同樣一個1代表不同的含義,前面的 1是數值位,後面數的 1是符號位。
要將正數轉成對應的負數,其實只要用0減去這個數就可以了。比如,-8其實就是0-8。用模數的概念解釋如下圖

為什麼正數加法也適用於二進制的補碼?

實際上,我們要證明的是,X-Y或X+(-Y)可以用X加上Y的2的補碼(-Y)完成。
Y的二進制補碼等於(11111111-Y)+1。所以,X加上Y的2的補碼,就等於:X + (11111111-Y) + 1;我們假定這個算式的結果等於Z,即 Z = X + (11111111-Y) + 1。
接下來,分成兩種情況討論。
第一種情況,如果X小於Y,那麼Z是一個負數。這時,我們就對Z採用補碼的逆運算,就是在做一次求補碼運算,求出它對應的正數絕對值,只要前面加上負號就行了。所以,
Z = -[11111111-Z+1] = -[11111111-(X + (11111111-Y) + 1)+1)] = X -
Y;這里如果X Y Z都是無符號型的,且X < Y 那麼Z 最終得到的數是|X-Y|距離的絕對值了,比如X=1,Y=
255,那麼Z=2,因為從255到1隻要加兩次就到了。這里你不要問我為什麼,這里就用到上面的模概念。
第二種情況,如果X大於Y,這意味著Z肯定大於11111111,但是我們規定了這是8位機,最高的第9位是溢出位,必須被捨去,捨去相當於減去嗎!所以減去100000000。所以,
Z = Z - 100000000 = X + (11111111-Y) + 1 - 100000000 = X - Y
這就證明了,在正常的加法規則下,可以利用2的補碼得到正數與負數相加的正確結果。換言之,計算機只要部署加法電路和補碼電路,就可以完成所有整數的加法。

❷ 補碼是1.0000,它的源碼和真值是多少(請寫出過程)

補碼是 1.0000,它的源碼和真值是多少?

---------------------

你的說法,有謬誤。應該說:

數值X 的補碼是 1.0000,X 的源碼和真值是多少?

回答如下:

補碼和原碼,並非是一一對應的。

你要知道:補碼,比原碼多一個。

某個特殊的數值,有補碼,卻沒有原碼,這是事實。

1.0000,這是定點小數-1.0 的補碼。

真值就是:-1.0。

而-1.0 的原碼,並不存在。

你要是用「補碼的補碼」來求原碼,就肯定是錯誤的。

去翻翻書吧,這結論,並沒有什麼過程,就是一個結論。

❸ 為什麼「對於真值0,源碼有兩種不同的表現形式,而補碼卻只有唯一的一種表現形式.」

0可以是+0,也可以是-0
0的原碼為:10000(-0),00000(+0)
+0的補碼和原碼相同,為00000
-0的補碼是在-0的原碼(10000)的基礎上,符號位不變,其它位按位取反再在低位加1(11111+1=00000),進而得到-0的補碼00000
所以補碼表示0隻有一種情況00000.而原碼則表示了兩次,分別為10000和00000.
希望可以幫到你,謝謝!

❹ 原碼反碼補碼的意義

問題一:原碼、補碼和反碼的概念??? 數在計算機中是以二進制形式表示的。
數分為有符號數和無符號數。
原碼、反碼、補碼都是有符號定點數的表示方法。
一個有符號定點數的最高位為符號位,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語言中不需要關心原反補碼!

熱點內容
mud源碼下載 發布:2025-01-23 21:19:46 瀏覽:134
反恐精英15游戲伺服器ip 發布:2025-01-23 21:13:38 瀏覽:850
起床的戰爭玩什麼伺服器 發布:2025-01-23 21:03:06 瀏覽:141
企業級安卓手機防毒軟體哪個好 發布:2025-01-23 20:59:28 瀏覽:243
資料庫精美 發布:2025-01-23 20:37:05 瀏覽:235
mysql怎麼編譯驅動 發布:2025-01-23 20:35:15 瀏覽:467
修改資料庫的語句是 發布:2025-01-23 20:26:17 瀏覽:762
linuxping域名 發布:2025-01-23 20:24:34 瀏覽:479
神經網路演算法應用 發布:2025-01-23 20:18:36 瀏覽:219
冒險島按鍵精靈腳本下載 發布:2025-01-23 19:46:50 瀏覽:751