1樓:
解答過程:
正數的原碼、反碼和補碼相同。
負數的反碼在原碼基礎上進行「除符號位外各位取反」操作而來;負數的補碼在反碼的基礎上進行「末位加1」操作而來。
符號位:正數用0表示,負數用1表示。
假設機器字長為8位。
89的二進位制為1011001,98的二進位制為1100010[+89]原碼 = 01011001 即0 1011001[+89]反碼 = 01011001
[+89]補碼 = 01011001
[-98]原碼 = 11100010 即1 1100010[-98]反碼 = 10011101
[-98]補碼 = 10011110
2樓:匿名使用者
+89是正整數, 正整數的原碼反碼補碼都一樣故為89的二進位制表示:01011001
-98是負數, 原碼是98的二進位制表示的最高位的0改為1, 98的二進位制表示是01100010
最高位的0改為1則是: 11100010(最高位符號位, 0表示正數, 1表示負數)
其反碼為-98的原碼的除符號位(最高位)以外的所有位取反, 即: 10011101
其補碼為其反碼加1, 故為: 10011110, ok~~
3樓:匿名使用者
二進位制中:
(1)負數的
補碼=反碼+1
(2)正數的原碼、反碼、補碼都是其本身。
比如:八位機器碼中,+1和-1的原碼、反碼、補碼的表示如下+1:0 00000001,0 00000001,0 00000001。
-1:1 00000001,1 11111110,1 11111111. (符號位用空格隔開以示區別)
一個數的原碼,反碼,補碼怎麼算
4樓:匿名使用者
數在計算機中是以二進位制形式表示的。
數分為有符號數和無符號數。
原碼、反碼、補碼都是有符號定點數的表示方法。
一個有符號定點數的最高位為符號位,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」,數值部分按位取反。
例如: 符號位 數值位
[+7]反= 0 0000111 b
[-7]反= 1 1111000 b
注意:a. 數0的反碼也有兩種形式,即
[+0]反=00000000b
[- 0]反=11111111b
b. 8位二進位制反碼的表示範圍:-127~+127
3)補碼的表示方法
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而言互為補數。
同理,計算機的運算部件與暫存器都有一定字長的限制(假設字長為8),因此它的運算也是一種模運算。當計數器計滿8位也就是256個數後會產生溢位,又從頭開始計數。產生溢位的量就是計數器的模,顯然,8位二進位制數,它的模數為28=256。
在計算中,兩個互補的數稱為「補碼」。
2)補碼的表示: 正數:正數的補碼和原碼相同。
負數:負數的補碼則是符號位為「1」,數值部分按位取反後再在末位(最低位)加1。也就是「反碼+1」。
例如: 符號位 數值位
[+7]補= 0 0000111 b
[-7]補= 1 1111001 b
補碼在微型機中是一種重要的編碼形式,請注意:
a.採用補碼後,可以方便地將減法運算轉化成加法運算,運算過程得到簡化。正數的補碼即是它所表示的數的真值,而負數的補碼的數值部份卻不是它所表示的數的真值。
採用補碼進行運算,所得結果仍為補碼。
b.與原碼、反碼不同,數值0的補碼只有一個,即 [0]補=00000000b。
c.若字長為8位,則補碼所表示的範圍為-128~+127;進行補碼運算時,應注意所得結果不應超過補碼所能表示數的範圍。
5樓:湖海散人
首先,機器數是有上限的,以8位數為例,只有256個數可以處理,即00000000到11111111
如果只考慮自然數,那麼00000000~11111111對應0~255,就是二進位制表示。但是有的時候需要負數,怎麼辦呢?科學家想到,這256個數可以分成2組,讓0開頭的表示正數和0,1開頭的表示負數。
所以00000000~01111111依然對應0~127,但是10000000~11111111本該對應-0~-127, 0和-0是一回事,於是把-0當做-128 。這樣就用00000000~11111111表示了-128~127 。這就是【原碼】
補碼是為了計算方便而發明的。原始計算器只能做加法不能做減法,但是科學家發現,例如7+(-5)=2可以這樣算:7+(-5) = 7+(10000-5)-10000 = 10002 - 10000 = 2 。
這很奇怪,因為機器太傻,只能做加法,但是雖然不會減法,-10000還是很方便的,只要去掉開頭的1;用10000減也是很方便的,因為可以用9999減然後+1,而用9999減,只要把每一位用9減。這就彌補了不能做減法的不足。以10000為基準,我們說-5的補碼是9995,因為它們加上7後,一個是2,一個是10002,只相差一個最高位(有趣的是,計算機計算高位會溢位,比如對於8位計算,256或更大的數需要超過8位來表示,會因放不下被捨去,結果就完全相同了)。
均衡正負,補碼也是用00000000~11111111表示-128~127,正數部分照舊,但是用11111111表示-1,11111110表示-2,以此類推到-128,因為7+(-2)=5,7+11111110(即254)等於231,二進位制表示要9位:100000101,捨去第一位為00000101,就是5 。這就是【補碼】
反碼是為了方便計算補碼,提出的稱呼。十進位制每一位取反不就是用9999減麼?二進位制就是用11111111減,等價於取反(因為只有2個數字,而十進位制有10個)。
對於-128到0之間的數,比如-5,即-00000101,按位取反即可。但是原碼是把第一位當成符號的,所以你可以先寫成【自然二進位制表示】,然後全部取反。之所以有反碼,是因為反碼很好算(按位取反),然後+1就是補碼,因此充當了一箇中間角色。
原碼好看,補碼好用,反碼是中間步驟。
6樓:幻形術
原碼:就是常規的二進位制數編碼。其中,有符號整數時二進位制最高位表示符號位,0為正,1為負;無符號整數時所有位都用來表示數值。
以下都以1個位元組8bit的數為例,如果用1個位元組表示無符號數,那麼255的原碼就是11111111, 127的原碼就是01111111,顯示錶示範圍是0~255共256個數;
如果用1位元組8bit表示有符號整數,那麼最高位表示符號位,低7位表示數值,顯示255越界了表示不了,-127的原碼就是11111111,正127的原碼是01111111,也即表示範圍是-127~127共255個數,其中有正0和負0兩種方法表示0.。
有了原碼的認識之後,再來看反碼和補碼:
正整數的反碼、補碼跟原碼一樣,當然如果是無符號整數,也就無所謂什麼碼了,因為都是一樣的。
那麼問題就在於有符號整數裡的負數了:
負數的反碼:就是在原碼的基礎上,符號位不變,其餘位對應取反,也是0變為1,1變為0. 比如-1,原碼是10000001,那麼反碼就是11111110.
再來負數的補碼:在反碼的基礎上,加1。所以-1的補碼就是11111111了。
為什麼會有反碼補碼的概念?為什麼說計算機裡的整數都是存的補碼而不是原碼?
反碼的作用只是為了引出補碼,關鍵就是補碼的存在,實際上就是為了方便計算機裡的負數加法或者說叫減法運算,有了補碼後,負數運算也變成正數運算了,減法運算也變成加法運算了。
再來細看-1的補碼11111111,其實就是無符號整數255,顯然對於1位元組來說,11111111 + 00000001後即溢位變為0,正好,-1+1後也是0,255+1後溢位也是0.
也即是說int8_t型別的-1與uint8_t的255是在二進位制層面上相等的,當你用==去判斷的時候結果為真。當你對一個uint8_t型別的變數賦值為-1時,它的值實際就是255.
於是負數補碼從另一個概念上講,實際上就是如果某個二進位制碼加上該負數絕對值之後等於0了,那麼該二進位制碼就是該負數的補碼。11111111 + 1後為0了,那麼11111111就是-1的補碼,同理,11111110是-2的的補碼。
而對於short、int、long型別的量,類似,自己類推。
1的原碼,補碼,反碼是什麼,0的原碼 反碼 補碼是什麼?
1 機器數一個數在計算機中的二進位制表示形式,叫做這個數的機器數。機器數是帶符號的,在計算機用一個數的最高位存放符號,正數為0,負數為1.比如,十進位制中的數 3,計算機字長為8位,轉換成二進位制就是00000011。如果是 3,就是 10000011 那麼 1,就是10000001 2.原碼 原碼...
在電腦中的原碼,反碼,補碼都是什麼意思啊
第一位是符號位,23的這位是1。23的原碼是10111,前面補兩個0,就是0010111所以 23的原碼就是10010111 反碼就是11101000 補碼就是反碼 1 11101001 1 原碼的定義 原碼錶示法是機器數的一種簡單的表示法。其符號位用0表示正號,用 表示負號,數值一般用二進位制形式...
用八位二進位制數表示 128的原碼,反碼,補碼,求指點
8位字長整數 bai 原碼範圍du 1111 1111b zhi0111 1111b 真值dao範回圍 111 1111b 111 1111b,即 127d 127d 反碼範答圍 1000 0000b 0111 1111b真值範圍 111 1111b 111 1111b,即 127d 127d 補碼...