强奸久久久久久久|草草浮力在线影院|手机成人无码av|亚洲精品狼友视频|国产国模精品一区|久久成人中文字幕|超碰在线视屏免费|玖玖欧洲一区二区|欧美精品无码一区|日韩无遮一区二区

首頁(yè) > 資訊 > 經(jīng)驗(yàn) > 原碼補(bǔ)碼,原碼補(bǔ)碼

原碼補(bǔ)碼,原碼補(bǔ)碼

來(lái)源:整理 時(shí)間:2023-08-31 01:53:39 編輯:智能門戶 手機(jī)版

本文目錄一覽

1,原碼補(bǔ)碼

1:我們來(lái)看一下補(bǔ)碼的求得過(guò)程:將原碼的各位取反,再加1,得到補(bǔ)碼。舉個(gè)例子,1001,它全部取反之后就是0110,再加1得到0111。將原碼與補(bǔ)碼加相,會(huì)得到10000。我們應(yīng)該知道,計(jì)算機(jī)最基礎(chǔ)的運(yùn)算器只能做加法,所以叫累加器,它做不了減法。所以當(dāng)需要減法的時(shí)候我們?nèi)p數(shù)的補(bǔ)碼,用被減數(shù)去加這個(gè)補(bǔ)碼。如果是1111-1001=0110的話就相當(dāng)于1111-(10000-0111)=1111 0111=0110,其中0111是1001的補(bǔ)碼。由于碼不像數(shù)字,碼是有位數(shù)的限制的,當(dāng)有多于其位數(shù)的操作時(shí)是不表現(xiàn)出來(lái)的,所以減去一個(gè)數(shù)的原碼就相當(dāng)于加上它的補(bǔ)碼。相信,看明白了這一條,第三個(gè)問(wèn)題也就解決了。 2.規(guī)定……慣例的,當(dāng)初就這么說(shuō)的,反正二進(jìn)制就兩個(gè)數(shù),不是0就是1,取反就是對(duì)方。1比0大,正數(shù)比負(fù)數(shù)大……我是這樣想的,這一點(diǎn)我不敢肯定。 4.不記符號(hào)位的話,原碼 補(bǔ)碼=100...0(0的位數(shù)與原碼的位置一致),那你說(shuō)這兩個(gè)碼是不是互為原補(bǔ)碼?取補(bǔ)碼之后再取一次補(bǔ)碼就是自身了。
正數(shù)的補(bǔ)碼就是把1換成0,0換成1 而負(fù)數(shù)補(bǔ)碼則是按位取反再+1 你的說(shuō)法是正確的~

原碼補(bǔ)碼

2,原碼和補(bǔ)碼的表示范圍

如果是n=8位二進(jìn)制:  原碼范圍:-127~+127,寫(xiě)成16進(jìn)制為FEH~7FH  補(bǔ)碼范圍:-128~+127,寫(xiě)成16進(jìn)制為FFH~7FH  如果是n=16位二進(jìn)制:  原碼范圍:-32767~+32767,補(bǔ)碼范圍:-32768~+32767  如果是n=32位二進(jìn)制:  原碼范圍:- 2 32-1–1 ~ + 2 32-1 –1 ,補(bǔ)碼范圍:- 2 32-1–1 ~ + 2 32-1 –1  原碼公式:- 2 n-1–1 ~ + 2 n-1 –1  補(bǔ)碼公式:- 2 n-1 ~ + 2 n-1 –1  (公式中的n-1是指數(shù))
都是從全0到全1.具體與碼值的類型無(wú)關(guān),而與是否有符號(hào)有關(guān)。對(duì)于n位的變量。當(dāng)為無(wú)符號(hào)數(shù)時(shí),其范圍為0~2^n-1。有符號(hào)數(shù)時(shí),其范圍為-2^(n-1) ~ 2^(n-1)-1。這里的^是乘方符號(hào)。2^n也就是2的n次冪。比如,short為16位,于是short的表示范圍就是-2^15 ~ 2^15-1即-32768~32767.unsigned short的范圍也就是0~2^16-1即0~65535.
這個(gè)沒(méi)有范圍

原碼和補(bǔ)碼的表示范圍

3,什么叫原碼 補(bǔ)碼 反碼

簡(jiǎn)單說(shuō)就是二進(jìn)制數(shù) 分正數(shù)和負(fù)數(shù)之分 正數(shù)的原碼 反碼 補(bǔ)碼 都一樣 負(fù)數(shù)的反碼是0變1 1變0 補(bǔ)碼就是在反碼的基礎(chǔ)上加1. 明白不 ? 好好整吧,加油 相信你一定能搞定。
原碼:就是二進(jìn)制碼 補(bǔ)碼:就是二進(jìn)制碼,但是正數(shù)的補(bǔ)碼是,負(fù)數(shù)則不同,原碼(除符號(hào)位外)各位取反,并在未位加1 反碼:正數(shù)就是進(jìn)制碼,負(fù)數(shù)原碼除符號(hào)位外各取反就是。
原碼就是原機(jī)器編碼; 補(bǔ)碼:如果機(jī)器數(shù)是正數(shù),則該機(jī)器數(shù)的補(bǔ)碼與原碼一樣;如果機(jī)器數(shù)是負(fù)數(shù),則該機(jī)器數(shù)的補(bǔ)碼是對(duì)它的原碼(除符號(hào)位外)各位取反,并在未位加1而得到; 反碼:如果機(jī)器數(shù)是正數(shù),則該機(jī)器數(shù)的反碼與原碼一樣;如果機(jī)器數(shù)是負(fù)數(shù),則該機(jī)器數(shù)的反碼是對(duì)它的原碼(符號(hào)位除外)各位取反而得到的
數(shù)在計(jì)算機(jī)中是以二進(jìn)制形式表示的。 數(shù)分為有符號(hào)數(shù)和無(wú)符號(hào)數(shù)。 原碼、反碼、補(bǔ)碼都是有符號(hào)定點(diǎn)數(shù)的表示方法。 一個(gè)有符號(hào)定點(diǎn)數(shù)的最高位為符號(hào)位,0是正,1是副。 以下都以8位整數(shù)為例, 原碼就是這個(gè)數(shù)本身的二進(jìn)制形式。 例如 0000001 就是+1 1000001 就是-1 正數(shù)的反碼和補(bǔ)碼都是和原碼相同。 負(fù)數(shù)的反碼是將其原碼除符號(hào)位之外的各位求反 [-3]反=[10000011]反=11111100 負(fù)數(shù)的補(bǔ)碼是將其原碼除符號(hào)位之外的各位求反之后在末位再加1。 [-3]補(bǔ)=[10000011]補(bǔ)=11111101 一個(gè)數(shù)和它的補(bǔ)碼是可逆的。 為什么要設(shè)立補(bǔ)碼呢? 第一是為了能讓計(jì)算機(jī)執(zhí)行減法: [a-b]補(bǔ)=a補(bǔ)+(-b)補(bǔ) 第二個(gè)原因是為了統(tǒng)一正0和負(fù)0 正零:00000000 負(fù)零:10000000 這兩個(gè)數(shù)其實(shí)都是0,但他們的原碼卻有不同的表示。 但是他們的補(bǔ)碼是一樣的,都是00000000 特別注意,如果+1之后有進(jìn)位的,要一直往前進(jìn)位,包括符號(hào)位?。ㄟ@和反碼是不同的!) [10000000]補(bǔ) =[10000000]反+1 =11111111+1 =(1)00000000 =00000000(最高位溢出了,符號(hào)位變成了0) 有人會(huì)問(wèn) 10000000這個(gè)補(bǔ)碼表示的哪個(gè)數(shù)的補(bǔ)碼呢? 其實(shí)這是一個(gè)規(guī)定,這個(gè)數(shù)表示的是-128 所以n位補(bǔ)碼能表示的范圍是 -2^(n-1)到2^(n-1)-1 比n位原碼能表示的數(shù)多一個(gè) 又例: 1011 原碼:01011 反碼:01011 //正數(shù)時(shí),反碼=原碼 補(bǔ)碼:01011 //正數(shù)時(shí),補(bǔ)碼=原碼 -1011 原碼:11011 反碼:10100 //負(fù)數(shù)時(shí),反碼為原碼取反 補(bǔ)碼:10101 //負(fù)數(shù)時(shí),補(bǔ)碼為原碼取反+1 0.1101 原碼:0.1101 反碼:0.1101 //正數(shù)時(shí),反碼=原碼 補(bǔ)碼:0.1101 //正數(shù)時(shí),補(bǔ)碼=原碼 -0.1101 原碼:1.1101 反碼:1.0010 //負(fù)數(shù)時(shí),反碼為原碼取反 補(bǔ)碼:1.0011 //負(fù)數(shù)時(shí),補(bǔ)碼為原碼取反+1 在計(jì)算機(jī)內(nèi),定點(diǎn)數(shù)有3種表示法:原碼、反碼和補(bǔ)碼 所謂原碼就是前面所介紹的二進(jìn)制定點(diǎn)表示法,即最高位為符號(hào)位,“0”表示正,“1”表示負(fù),其余位表示數(shù)值的大小。 反碼表示法規(guī)定:正數(shù)的反碼與其原碼相同;負(fù)數(shù)的反碼是對(duì)其原碼逐位取反,但符號(hào)位除外。 補(bǔ)碼表示法規(guī)定:正數(shù)的補(bǔ)碼與其原碼相同;負(fù)數(shù)的補(bǔ)碼是在其反碼的末位加1。

什么叫原碼 補(bǔ)碼 反碼

4,什么是補(bǔ)碼原碼和反碼

用二進(jìn)制數(shù)表示數(shù)值的方法:原碼表示法是機(jī)器數(shù)的一種簡(jiǎn)單的表示法。最高位是符號(hào)位,其符號(hào)位用0表示正號(hào),用:1表示負(fù)號(hào),數(shù)值一般用二進(jìn)制形式表示。例 6的 8位二進(jìn)制原碼=00000110;-6的 8位二進(jìn)制原碼=10000110反碼可由原碼得到。如果機(jī)器數(shù)是正數(shù),則該機(jī)器數(shù)的反碼與原碼一樣;如果機(jī)器數(shù)是負(fù)數(shù),則該機(jī)器數(shù)的反碼是(符號(hào)位不變)對(duì)它的原碼其他各位諸位取反而得到的。例 6的 8位二進(jìn)制反碼=00000110;-6的 8位二進(jìn)制反碼=11111001補(bǔ)碼 機(jī)器數(shù)是正數(shù)時(shí),則該機(jī)器數(shù)的補(bǔ)碼與原碼一樣;如果機(jī)器數(shù)是負(fù)數(shù),則該機(jī)器數(shù)的補(bǔ)碼是它的反碼在未位加1而得到的。例 6的 8位二進(jìn)制補(bǔ)碼=00000110;-6的 8位二進(jìn)制補(bǔ)碼=11111010
數(shù)值在計(jì)算機(jī)中表示形式為機(jī)器數(shù),計(jì)算機(jī)只能識(shí)別0和1,使用的是二進(jìn)制,而在日常生活中人們使用的是十進(jìn)制,"正如亞里士多德早就指出的那樣,今天十進(jìn)制的廣泛采用,只不過(guò)我們絕大多數(shù)人生來(lái)具有10個(gè)手指頭這個(gè)解剖學(xué)事實(shí)的結(jié)果.盡管在歷史上手指計(jì)數(shù)(5,10進(jìn)制)的實(shí)踐要比二或三進(jìn)制計(jì)數(shù)出現(xiàn)的晚."(摘自<<數(shù)學(xué)發(fā)展史>>有空大家可以看看哦~,很有意思的).為了能方便的與二進(jìn)制轉(zhuǎn)換,就使用了十六進(jìn)制(2 4)和八進(jìn)制(23).下面進(jìn)入正題. 數(shù)值有正負(fù)之分,計(jì)算機(jī)就用一個(gè)數(shù)的最高位存放符號(hào)(0為正,1為負(fù)).這就是機(jī)器數(shù)的原碼了.假設(shè)機(jī)器能處理的位數(shù)為8.即字長(zhǎng)為1byte,原碼能表示數(shù)值的范圍為 (-127~-0 +0~127)共256個(gè). 有了數(shù)值的表示方法就可以對(duì)數(shù)進(jìn)行算術(shù)運(yùn)算.但是很快就發(fā)現(xiàn)用帶符號(hào)位的原碼進(jìn)行乘除運(yùn)算時(shí)結(jié)果正確,而在加減運(yùn)算的時(shí)候就出現(xiàn)了問(wèn)題,如下: 假設(shè)字長(zhǎng)為8bits ( 1 ) 10- ( 1 )10 = ( 1 )10 + ( -1 )10 = ( 0 )10 (00000001)原 + (10000001)原 = (10000010)原 = ( -2 ) 顯然不正確. 因?yàn)樵趦蓚€(gè)整數(shù)的加法運(yùn)算中是沒(méi)有問(wèn)題的,于是就發(fā)現(xiàn)問(wèn)題出現(xiàn)在帶符號(hào)位的負(fù)數(shù)身上,對(duì)除符號(hào)位外的其余各位逐位取反就產(chǎn)生了反碼.反碼的取值空間和原碼相同且一一對(duì)應(yīng). 下面是反碼的減法運(yùn)算: ( 1 )10 - ( 1 ) 10= ( 1 ) 10+ ( -1 ) 10= ( 0 )10 (00000001) 反+ (11111110)反 = (11111111)反 = ( -0 ) 有問(wèn)題. ( 1 )10 - ( 2)10 = ( 1 )10 + ( -2 )10 = ( -1 )10 (00000001) 反+ (11111101)反 = (11111110)反 = ( -1 ) 正確 問(wèn)題出現(xiàn)在(+0)和(-0)上,在人們的計(jì)算概念中零是沒(méi)有正負(fù)之分的.(印度人首先將零作為標(biāo)記并放入運(yùn)算之中,包含有零號(hào)的印度數(shù)學(xué)和十進(jìn)制計(jì)數(shù)對(duì)人類文明的貢獻(xiàn)極大). 于是就引入了補(bǔ)碼概念. 負(fù)數(shù)的補(bǔ)碼就是對(duì)反碼加一,而正數(shù)不變,正數(shù)的原碼反碼補(bǔ)碼是一樣的.在補(bǔ)碼中用(-128)代替了(-0),所以補(bǔ)碼的表示范圍為: (-128~0~127)共256個(gè). 注意:(-128)沒(méi)有相對(duì)應(yīng)的原碼和反碼, (-128) = (10000000) 補(bǔ)碼的加減運(yùn)算如下: ( 1 ) 10- ( 1 ) 10= ( 1 )10 + ( -1 )10 = ( 0 )10 (00000001)補(bǔ) + (11111111)補(bǔ) = (00000000)補(bǔ) = ( 0 ) 正確 ( 1 ) 10- ( 2) 10= ( 1 )10 + ( -2 )10 = ( -1 )10 (00000001) 補(bǔ)+ (11111110) 補(bǔ)= (11111111)補(bǔ) = ( -1 ) 正確 所以補(bǔ)碼的設(shè)計(jì)目的是: ⑴使符號(hào)位能與有效值部分一起參加運(yùn)算,從而簡(jiǎn)化運(yùn)算規(guī)則. ⑵使減法運(yùn)算轉(zhuǎn)換為加法運(yùn)算,進(jìn)一步簡(jiǎn)化計(jì)算機(jī)中運(yùn)算器的線路設(shè)計(jì) 所有這些轉(zhuǎn)換都是在計(jì)算機(jī)的最底層進(jìn)行的,而在我們使用的匯編、C等其他高級(jí)語(yǔ)言中使用的都是原碼。
1. 原碼 原碼就是符號(hào)位加上真值的絕對(duì)值, 即用第一位表示符號(hào), 其余位表示值. 比如如果是8位二進(jìn)制: [+1]原 = 0000 0001 [-1]原 = 1000 0001 第一位是符號(hào)位. 因?yàn)榈谝晃皇欠?hào)位, 所以8位二進(jìn)制數(shù)的取值范圍就是: [1111 1111 , 0111 1111] 即[-127 , 127] 2. 反碼 反碼的表示方法是: 正數(shù)的反碼是其本身 負(fù)數(shù)的反碼是在其原碼的基礎(chǔ)上, 符號(hào)位不變,其余各個(gè)位取反. [+1] = [00000001]原 = [00000001]反 [-1] = [10000001]原 = [11111110]反 可見(jiàn)如果一個(gè)反碼表示的是負(fù)數(shù), 人腦無(wú)法直觀的看出來(lái)它的數(shù)值. 通常要將其轉(zhuǎn)換成原碼再計(jì)算. 3. 補(bǔ)碼 補(bǔ)碼的表示方法是: 正數(shù)的補(bǔ)碼就是其本身 負(fù)數(shù)的補(bǔ)碼是在其原碼的基礎(chǔ)上, 符號(hào)位不變, 然后按位取反再加1. (即在反碼的基礎(chǔ)上+1) [+1] = [00000001]原 = [00000001]反 = [00000001]補(bǔ) [-1] = [10000001]原 = [11111110]反 = [11111111]補(bǔ)

5,原碼反碼和補(bǔ)碼表示的規(guī)則分別是什么

數(shù)在計(jì)算機(jī)中是以二進(jìn)制形式表示的。數(shù)分為有符號(hào)數(shù)和無(wú)符號(hào)數(shù)。原碼、反碼、補(bǔ)碼都是有符號(hào)定點(diǎn)數(shù)的表示方法。一個(gè)有符號(hào)定點(diǎn)數(shù)的最高位為符號(hào)位,0是正,1是副。以下都以8位整數(shù)為例,原碼就是這個(gè)數(shù)本身的二進(jìn)制形式。例如0000001就是+11000001就是-1正數(shù)的反碼和補(bǔ)碼都是和原碼相同。負(fù)數(shù)的反碼是將其原碼除符號(hào)位之外的各位求反[-3]反=[10000011]反=11111100負(fù)數(shù)的補(bǔ)碼是將其原碼除符號(hào)位之外的各位求反之后在末位再加1。[-3]補(bǔ)=[10000011]補(bǔ)=11111101一個(gè)數(shù)和它的補(bǔ)碼是可逆的。為什么要設(shè)立補(bǔ)碼呢?第一是為了能讓計(jì)算機(jī)執(zhí)行減法:[a-b]補(bǔ)=a補(bǔ)+(-b)補(bǔ)第二個(gè)原因是為了統(tǒng)一正0和負(fù)0正零:00000000負(fù)零:10000000這兩個(gè)數(shù)其實(shí)都是0,但他們的原碼卻有不同的表示。但是他們的補(bǔ)碼是一樣的,都是00000000特別注意,如果+1之后有進(jìn)位的,要一直往前進(jìn)位,包括符號(hào)位?。ㄟ@和反碼是不同的!)[10000000]補(bǔ)=[10000000]反+1=11111111+1=(1)00000000=00000000(最高位溢出了,符號(hào)位變成了0)有人會(huì)問(wèn)10000000這個(gè)補(bǔ)碼表示的哪個(gè)數(shù)的補(bǔ)碼呢?其實(shí)這是一個(gè)規(guī)定,這個(gè)數(shù)表示的是-128所以n位補(bǔ)碼能表示的范圍是-2^(n-1)到2^(n-1)-1比n位原碼能表示的數(shù)多一個(gè)又例:1011原碼:01011反碼:01011//正數(shù)時(shí),反碼=原碼補(bǔ)碼:01011//正數(shù)時(shí),補(bǔ)碼=原碼-1011原碼:11011反碼:10100//負(fù)數(shù)時(shí),反碼為原碼取反補(bǔ)碼:10101//負(fù)數(shù)時(shí),補(bǔ)碼為原碼取反+10.1101原碼:0.1101反碼:0.1101//正數(shù)時(shí),反碼=原碼補(bǔ)碼:0.1101//正數(shù)時(shí),補(bǔ)碼=原碼-0.1101原碼:1.1101反碼:1.0010//負(fù)數(shù)時(shí),反碼為原碼取反補(bǔ)碼:1.0011//負(fù)數(shù)時(shí),補(bǔ)碼為原碼取反+1在計(jì)算機(jī)內(nèi),定點(diǎn)數(shù)有3種表示法:原碼、反碼和補(bǔ)碼所謂原碼就是前面所介紹的二進(jìn)制定點(diǎn)表示法,即最高位為符號(hào)位,“0”表示正,“1”表示負(fù),其余位表示數(shù)值的大小。反碼表示法規(guī)定:正數(shù)的反碼與其原碼相同;負(fù)數(shù)的反碼是對(duì)其原碼逐位取反,但符號(hào)位除外。補(bǔ)碼表示法規(guī)定:正數(shù)的補(bǔ)碼與其原碼相同;負(fù)數(shù)的補(bǔ)碼是在其反碼的末位加1。
帶符號(hào)的數(shù)字,可變成各種代碼(八位的),見(jiàn)圖:但是,在計(jì)算機(jī)中,原碼和反碼都是不存在的。因此,就不必關(guān)心它們了。只有補(bǔ)碼,才是實(shí)用的編碼。其變換規(guī)律,你看看圖,就可以自己摸索出來(lái)。
數(shù)在計(jì)算機(jī)中是以二進(jìn)制形式表示的。數(shù)分為有符號(hào)數(shù)和無(wú)符號(hào)數(shù)。原碼、反碼、補(bǔ)碼都是有符號(hào)定點(diǎn)數(shù)的表示方法。一個(gè)有符號(hào)定點(diǎn)數(shù)的最高位為符號(hào)位,0是正,1是副。以下都以8位整數(shù)為例,原碼就是這個(gè)數(shù)本身的二進(jìn)制形式。例如0000001就是+11000001就是-1正數(shù)的反碼和補(bǔ)碼都是和原碼相同。負(fù)數(shù)的反碼是將其原碼除符號(hào)位之外的各位求反[-3]反=[10000011]反=11111100負(fù)數(shù)的補(bǔ)碼是將其原碼除符號(hào)位之外的各位求反之后在末位再加1。[-3]補(bǔ)=[10000011]補(bǔ)=11111101一個(gè)數(shù)和它的補(bǔ)碼是可逆的。為什么要設(shè)立補(bǔ)碼呢?第一是為了能讓計(jì)算機(jī)執(zhí)行減法:[a-b]補(bǔ)=a補(bǔ)+(-b)補(bǔ)第二個(gè)原因是為了統(tǒng)一正0和負(fù)0正零:00000000負(fù)零:10000000這兩個(gè)數(shù)其實(shí)都是0,但他們的原碼卻有不同的表示。但是他們的補(bǔ)碼是一樣的,都是00000000特別注意,如果+1之后有進(jìn)位的,要一直往前進(jìn)位,包括符號(hào)位!(這和反碼是不同的?。10000000]補(bǔ)=[10000000]反+1=11111111+1=(1)00000000=00000000(最高位溢出了,符號(hào)位變成了0)有人會(huì)問(wèn)10000000這個(gè)補(bǔ)碼表示的哪個(gè)數(shù)的補(bǔ)碼呢?其實(shí)這是一個(gè)規(guī)定,這個(gè)數(shù)表示的是-128所以n位補(bǔ)碼能表示的范圍是-2^(n-1)到2^(n-1)-1比n位原碼能表示的數(shù)多一個(gè)又例:1011原碼:01011反碼:01011//正數(shù)時(shí),反碼=原碼補(bǔ)碼:01011//正數(shù)時(shí),補(bǔ)碼=原碼-1011原碼:11011反碼:10100//負(fù)數(shù)時(shí),反碼為原碼取反補(bǔ)碼:10101//負(fù)數(shù)時(shí),補(bǔ)碼為原碼取反+10.1101原碼:0.1101反碼:0.1101//正數(shù)時(shí),反碼=原碼補(bǔ)碼:0.1101//正數(shù)時(shí),補(bǔ)碼=原碼-0.1101原碼:1.1101反碼:1.0010//負(fù)數(shù)時(shí),反碼為原碼取反補(bǔ)碼:1.0011//負(fù)數(shù)時(shí),補(bǔ)碼為原碼取反+1在計(jì)算機(jī)內(nèi),定點(diǎn)數(shù)有3種表示法:原碼、反碼和補(bǔ)碼所謂原碼就是前面所介紹的二進(jìn)制定點(diǎn)表示法,即最高位為符號(hào)位,“0”表示正,“1”表示負(fù),其余位表示數(shù)值的大小。反碼表示法規(guī)定:正數(shù)的反碼與其原碼相同;負(fù)數(shù)的反碼是對(duì)其原碼逐位取反,但符號(hào)位除外。補(bǔ)碼表示法規(guī)定:正數(shù)的補(bǔ)碼與其原碼相同;負(fù)數(shù)的補(bǔ)碼是在其反碼的末位加1。
一. 機(jī)器數(shù)和真值 在學(xué)習(xí)原碼, 反碼和補(bǔ)碼之前, 需要先了解機(jī)器數(shù)和真值的概念. 1、機(jī)器數(shù) 一個(gè)數(shù)在計(jì)算機(jī)中的二進(jìn)制表示形式, 叫做這個(gè)數(shù)的機(jī)器數(shù)。機(jī)器數(shù)是帶符號(hào)的,在計(jì)算機(jī)用一個(gè)數(shù)的最高位存放符號(hào), 正數(shù)為0, 負(fù)數(shù)為1. 比如,十進(jìn)制中的數(shù) +3 ,計(jì)算機(jī)字長(zhǎng)為8位,轉(zhuǎn)換成二進(jìn)制就是00000011。如果是 -3 ,就是 10000011 。 那么,這里的 00000011 和 10000011 就是機(jī)器數(shù)。 2、真值 因 為第一位是符號(hào)位,所以機(jī)器數(shù)的形式值就不等于真正的數(shù)值。例如上面的有符號(hào)數(shù) 10000011,其最高位1代表負(fù),其真正數(shù)值是 -3 而不是形式值131(10000011轉(zhuǎn)換成十進(jìn)制等于131)。所以,為區(qū)別起見(jiàn),將帶符號(hào)位的機(jī)器數(shù)對(duì)應(yīng)的真正數(shù)值稱為機(jī)器數(shù)的真值。 例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1 二. 原碼, 反碼, 補(bǔ)碼的基礎(chǔ)概念和計(jì)算方法. 在探求為何機(jī)器要使用補(bǔ)碼之前, 讓我們先了解原碼, 反碼和補(bǔ)碼的概念.對(duì)于一個(gè)數(shù), 計(jì)算機(jī)要使用一定的編碼方式進(jìn)行存儲(chǔ). 原碼, 反碼, 補(bǔ)碼是機(jī)器存儲(chǔ)一個(gè)具體數(shù)字的編碼方式. 1. 原碼 原碼就是符號(hào)位加上真值的絕對(duì)值, 即用第一位表示符號(hào), 其余位表示值. 比如如果是8位二進(jìn)制: [+1]原 = 0000 0001 [-1]原 = 1000 0001 第一位是符號(hào)位. 因?yàn)榈谝晃皇欠?hào)位, 所以8位二進(jìn)制數(shù)的取值范圍就是: [1111 1111 , 0111 1111] 即 [-127 , 127] 原碼是人腦最容易理解和計(jì)算的表示方式. 2. 反碼 反碼的表示方法是: 正數(shù)的反碼是其本身 負(fù)數(shù)的反碼是在其原碼的基礎(chǔ)上, 符號(hào)位不變,其余各個(gè)位取反. [+1] = [00000001]原 = [00000001]反 [-1] = [10000001]原 = [11111110]反 可見(jiàn)如果一個(gè)反碼表示的是負(fù)數(shù), 人腦無(wú)法直觀的看出來(lái)它的數(shù)值. 通常要將其轉(zhuǎn)換成原碼再計(jì)算. 3. 補(bǔ)碼 補(bǔ)碼的表示方法是: 正數(shù)的補(bǔ)碼就是其本身 負(fù)數(shù)的補(bǔ)碼是在其原碼的基礎(chǔ)上, 符號(hào)位不變, 其余各位取反, 最后+1. (即在反碼的基礎(chǔ)上+1) [+1] = [00000001]原 = [00000001]反 = [00000001]補(bǔ) [-1] = [10000001]原 = [11111110]反 = [11111111]補(bǔ) 對(duì)于負(fù)數(shù), 補(bǔ)碼表示方式也是人腦無(wú)法直觀看出其數(shù)值的. 通常也需要轉(zhuǎn)換成原碼在計(jì)算其數(shù)值.

6,原碼反碼補(bǔ)碼

請(qǐng)我給你的詳解:原碼、補(bǔ)碼和反碼(1)原碼表示法 原碼表示法是機(jī)器數(shù)的一種簡(jiǎn)單的表示法。其符號(hào)位用0表示正號(hào),用:表示負(fù)號(hào),數(shù)值一般用二進(jìn)制形式表示。設(shè)有一數(shù)為x,則原碼表示可記作〔x〕原。例如,X1= +1010110X2= 一1001010其原碼記作:〔X1〕原=[+1010110]原=01010110〔X2〕原=[-1001010]原=11001010原碼表示數(shù)的范圍與二進(jìn)制位數(shù)有關(guān)。當(dāng)用8位二進(jìn)制來(lái)表示小數(shù)原碼時(shí),其表示范圍:最大值為0.1111111,其真值約為(0.99)10最小值為1.1111111,其真值約為(一0.99)10當(dāng)用8位二進(jìn)制來(lái)表示整數(shù)原碼時(shí),其表示范圍:最大值為01111111,其真值為(127)10最小值為11111111,其真值為(-127)10在原碼表示法中,對(duì)0有兩種表示形式:〔+0〕原=00000000[-0] 原=10000000(2)補(bǔ)碼表示法 機(jī)器數(shù)的補(bǔ)碼可由原碼得到。如果機(jī)器數(shù)是正數(shù),則該機(jī)器數(shù)的補(bǔ)碼與原碼一樣;如果機(jī)器數(shù)是負(fù)數(shù),則該機(jī)器數(shù)的補(bǔ)碼是對(duì)它的原碼(除符號(hào)位外)各位取反,并在未位加1而得到的。設(shè)有一數(shù)X,則X的補(bǔ)碼表示記作〔X〕補(bǔ)。例如,[X1]=+1010110[X2]= 一1001010[X1]原=01010110[X1]補(bǔ)=01010110即 [X1]原=[X1]補(bǔ)=01010110[X2] 原= 11001010[X2] 補(bǔ)=10110101+1=10110110補(bǔ)碼表示數(shù)的范圍與二進(jìn)制位數(shù)有關(guān)。當(dāng)采用8位二進(jìn)制表示時(shí),小數(shù)補(bǔ)碼的表示范圍:最大為0.1111111,其真值為(0.99)10最小為1.0000000,其真值為(一1)10采用8位二進(jìn)制表示時(shí),整數(shù)補(bǔ)碼的表示范圍:最大為01111111,其真值為(127)10最小為10000000,其真值為(一128)10在補(bǔ)碼表示法中,0只有一種表示形式:[+0]補(bǔ)=00000000[+0]補(bǔ)=11111111+1=00000000(由于受設(shè)備字長(zhǎng)的限制,最后的進(jìn)位丟失)所以有[+0]補(bǔ)=[+0]補(bǔ)=00000000(3)反碼表示法 機(jī)器數(shù)的反碼可由原碼得到。如果機(jī)器數(shù)是正數(shù),則該機(jī)器數(shù)的反碼與原碼一樣;如果機(jī)器數(shù)是負(fù)數(shù),則該機(jī)器數(shù)的反碼是對(duì)它的原碼(符號(hào)位除外)各位取反而得到的。設(shè)有一數(shù)X,則X的反碼表示記作〔X〕反。例如:X1= +1010110X2= 一1001010〔X1〕原=01010110[X1]反=〔X1〕原=01010110[X2]原=11001010[X2]反=10110101反碼通常作為求補(bǔ)過(guò)程的中間形式,即在一個(gè)負(fù)數(shù)的反碼的未位上加1,就得到了該負(fù)數(shù)的補(bǔ)碼。例1. 已知[X]原=10011010,求[X]補(bǔ)。分析如下:由[X]原求[X]補(bǔ)的原則是:若機(jī)器數(shù)為正數(shù),則[X]原=[X]補(bǔ);若機(jī)器數(shù)為負(fù)數(shù),則該機(jī)器數(shù)的補(bǔ)碼可對(duì)它的原碼(符號(hào)位除外)所有位求反,再在未位加1而得到?,F(xiàn)給定的機(jī)器數(shù)為負(fù)數(shù),故有[X]補(bǔ)=[X]原十1,即[X]原=10011010[X]反=11100101十) 1 [X]補(bǔ)=11100110例2. 已知[X]補(bǔ)=11100110,求〔X〕原。分析如下:對(duì)于機(jī)器數(shù)為正數(shù),則〔X〕原=〔X〕補(bǔ)對(duì)于機(jī)器數(shù)為負(fù)數(shù),則有〔X〕原=〔〔X〕補(bǔ)〕補(bǔ)現(xiàn)給定的為負(fù)數(shù),故有:〔X〕補(bǔ)=11100110〔〔X〕補(bǔ)〕反=10011001十) 1 〔〔X〕補(bǔ)〕補(bǔ)=10011010=〔X〕原 或者說(shuō):數(shù)在計(jì)算機(jī)中是以二進(jìn)制形式表示的。 數(shù)分為有符號(hào)數(shù)和無(wú)符號(hào)數(shù)。 原碼、反碼、補(bǔ)碼都是有符號(hào)定點(diǎn)數(shù)的表示方法。 一個(gè)有符號(hào)定點(diǎn)數(shù)的最高位為符號(hào)位,0是正,1是副。 以下都以8位整數(shù)為例, 原碼就是這個(gè)數(shù)本身的二進(jìn)制形式。 例如0000001 就是+11000001 就是-1 正數(shù)的反碼和補(bǔ)碼都是和原碼相同。 負(fù)數(shù)的反碼是將其原碼除符號(hào)位之外的各位求反 [-3]反=[10000011]反=11111100 負(fù)數(shù)的補(bǔ)碼是將其原碼除符號(hào)位之外的各位求反之后在末位再加1。 [-3]補(bǔ)=[10000011]補(bǔ)=11111101 一個(gè)數(shù)和它的補(bǔ)碼是可逆的。 為什么要設(shè)立補(bǔ)碼呢? 第一是為了能讓計(jì)算機(jī)執(zhí)行減法: [a-b]補(bǔ)=a補(bǔ)+(-b)補(bǔ) 第二個(gè)原因是為了統(tǒng)一正0和負(fù)0 正零:00000000 負(fù)零:10000000 這兩個(gè)數(shù)其實(shí)都是0,但他們的原碼卻有不同的表示。 但是他們的補(bǔ)碼是一樣的,都是00000000 特別注意,如果+1之后有進(jìn)位的,要一直往前進(jìn)位,包括符號(hào)位?。ㄟ@和反碼是不同的?。?[10000000]補(bǔ) =[10000000]反+1 =11111111+1 =(1)00000000 =00000000(最高位溢出了,符號(hào)位變成了0) 有人會(huì)問(wèn) 10000000這個(gè)補(bǔ)碼表示的哪個(gè)數(shù)的補(bǔ)碼呢? 其實(shí)這是一個(gè)規(guī)定,這個(gè)數(shù)表示的是-128 所以n位補(bǔ)碼能表示的范圍是 -2^(n-1)到2^(n-1)-1 比n位原碼能表示的數(shù)多一個(gè)又例:1011 原碼:01011 反碼:01011 //正數(shù)時(shí),反碼=原碼 補(bǔ)碼:01011 //正數(shù)時(shí),補(bǔ)碼=原碼 -1011 原碼:11011 反碼:10100 //負(fù)數(shù)時(shí),反碼為原碼取反 補(bǔ)碼:10101 //負(fù)數(shù)時(shí),補(bǔ)碼為原碼取反+1 0.1101 原碼:0.1101 反碼:0.1101 //正數(shù)時(shí),反碼=原碼 補(bǔ)碼:0.1101 //正數(shù)時(shí),補(bǔ)碼=原碼 -0.1101 原碼:1.1101 反碼:1.0010 //負(fù)數(shù)時(shí),反碼為原碼取反 補(bǔ)碼:1.0011 //負(fù)數(shù)時(shí),補(bǔ)碼為原碼取反+1 在計(jì)算機(jī)內(nèi),定點(diǎn)數(shù)有3種表示法:原碼、反碼和補(bǔ)碼所謂原碼就是前面所介紹的二進(jìn)制定點(diǎn)表示法,即最高位為符號(hào)位,“0”表示正,“1”表示負(fù),其余位表示數(shù)值的大小。 反碼表示法規(guī)定:正數(shù)的反碼與其原碼相同;負(fù)數(shù)的反碼是對(duì)其原碼逐位取反,但符號(hào)位除外。補(bǔ)碼表示法規(guī)定:正數(shù)的補(bǔ)碼與其原碼相同;負(fù)數(shù)的補(bǔ)碼是在其反碼的末位加1。假設(shè)有一 int 類型的數(shù),值為5,那么,我們知道它在計(jì)算機(jī)中表示為: 00000000 00000000 00000000 00000101 5轉(zhuǎn)換成二制是101,不過(guò)int類型的數(shù)占用4字節(jié)(32位),所以前面填了一堆0。 現(xiàn)在想知道,-5在計(jì)算機(jī)中如何表示? 在計(jì)算機(jī)中,負(fù)數(shù)以其正值的補(bǔ)碼形式表達(dá)。 什么叫補(bǔ)碼呢?這得從原碼,反碼說(shuō)起。 原碼:一個(gè)整數(shù),按照絕對(duì)值大小轉(zhuǎn)換成的二進(jìn)制數(shù),稱為原碼。 比如 00000000 00000000 00000000 00000101 是 5的 原碼。 反碼:將二進(jìn)制數(shù)按位取反,所得的新二進(jìn)制數(shù)稱為原二進(jìn)制數(shù)的反碼。 取反操作指:原為1,得0;原為0,得1。(1變0; 0變1) 比如:將00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。 稱:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反碼。 反碼是相互的,所以也可稱: 11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互為反碼。 補(bǔ)碼:反碼加1稱為補(bǔ)碼。 也就是說(shuō),要得到一個(gè)數(shù)的補(bǔ)碼,先得到反碼,然后將反碼加上1,所得數(shù)稱為補(bǔ)碼。 比如:00000000 00000000 00000000 00000101 的反碼是:11111111 11111111 11111111 11111010。 那么,補(bǔ)碼為: 11111111 11111111 11111111 11111010 1 = 11111111 11111111 11111111 11111011 所以,-5 在計(jì)算機(jī)中表達(dá)為:11111111 11111111 11111111 11111011。轉(zhuǎn)換為十六進(jìn)制:0xFFFFFFFB。 再舉一例,我們來(lái)看整數(shù)-1在計(jì)算機(jī)中如何表示。 假設(shè)這也是一個(gè)int類型,那么: 1、先取1的原碼:00000000 00000000 00000000 00000001 2、得反碼: 11111111 11111111 11111111 11111110 3、得補(bǔ)碼: 11111111 11111111 11111111 11111111 正數(shù)的原碼,補(bǔ)碼,反碼都相同,都等于它本身 負(fù)數(shù)的補(bǔ)碼是:符號(hào)位為1,其余各位求反,末位加1 反碼是:符號(hào)位為1,其余各位求反,但末位不加1 也就是說(shuō),反碼末位加上1就是補(bǔ)碼 1100110011 原 1011001100 反 除符號(hào)位,按位取反 1011001101 補(bǔ) 除符號(hào)位,按位取反再加1 正數(shù)的原反補(bǔ)是一樣的 在計(jì)算機(jī)中,數(shù)據(jù)是以補(bǔ)碼的形式存儲(chǔ)的: 在n位的機(jī)器數(shù)中,最高位為符號(hào)位,該位為零表示為正,為1表示為負(fù); 其余n-1位為數(shù)值位,各位的值可為0或1。 當(dāng)真值為正時(shí):原碼、反碼、補(bǔ)碼數(shù)值位完全相同; 當(dāng)真值為負(fù)時(shí): 原碼的數(shù)值位保持原樣, 反碼的數(shù)值位是原碼數(shù)值位的各位取反, 補(bǔ)碼則是反碼的最低位加一。 注意符號(hào)位不變。 如:若機(jī)器數(shù)是16位: 十進(jìn)制數(shù) 17 的原碼、反碼與補(bǔ)碼均為: 0000000000010001 十進(jìn)制數(shù)-17 的原碼、反碼與補(bǔ)碼分別為:1000000000010001、1111111111101110、1111111111101111
24=11000B30=11110B正數(shù)所有的原碼/反碼/補(bǔ)碼是相同的,請(qǐng)注意哦!
24:0001100030:00011110由于是正數(shù),所以三種碼相同
文章TAG:原碼補(bǔ)碼原碼補(bǔ)碼

最近更新

相關(guān)文章

經(jīng)驗(yàn)文章排行榜