女人夜夜春高潮爽A∨片传媒_国产精品VIDEOS麻豆_在线精品亚洲一区二区三区_亚洲熟妇无码av

編程代碼
新聞詳情

計算機的數據是以什么編碼形式表示的

發(fa)布時間:2021-03-17 09:05:02 瀏覽次數:4561

在計算機中有以下幾(ji)個對象(xiang)需要表(biao)示:

程序

整數

浮點數

字符串

邏輯值:0表示false,1表示true

在計算機中所有編碼的基本元素都是通(tong)過0、1這兩個基本符號來(lai)表示(shi),n位可以表示(shi)2^n個不同的對象

下面我們分別對以上的幾個對象進行簡單的介紹

邏輯型數據

True 真--1

False 假—0

數據運算

與運算

或運算

非運算

異或運算


字符型數據

在很久(jiu)之前,一(yi)群美(mei)國人研究(jiu)出(chu)來了計算機,其(qi)中(zhong)他們(men)發現他們(men)只(zhi)需要(yao)8位二進制(zhi)編碼(一(yi)個(ge)字(zi)節(jie))就可以表示世間萬(wan)物(其(qi)實它(ta)們(men)只(zhi)使用(yong)(yong)了7位),2^7=128,它(ta)們(men)用(yong)(yong)這128位,從0到127來存儲數字(zi)和字(zi)母,這個(ge)編碼就是(shi)我們(men)熟悉的Ascii碼


但(dan)是(shi)(shi)世界各國(guo)(guo)都用計算(suan)機,但(dan)是(shi)(shi)不(bu)(bu)使用中文(wen),比如我們(men)中國(guo)(guo)就(jiu)(jiu)不(bu)(bu)使用中文(wen),所以這個(ge)時候中國(guo)(guo)研究出來了GB2312和GBK。當前其它國(guo)(guo)家也(ye)開發出來了符合本國(guo)(guo)國(guo)(guo)情的編碼(ma),那么(me)這此時出現一個(ge)問題,就(jiu)(jiu)是(shi)(shi)自己國(guo)(guo)家用著(zhu)很嗨(hai),但(dan)是(shi)(shi)國(guo)(guo)與(yu)國(guo)(guo)之間交(jiao)流(liu)的時候就(jiu)(jiu)含麻煩了。

所(suo)以(yi)為(wei)了(le)(le)解決這個問(wen)題,標記標準(zhun)組織ISO著(zhu)手(shou)解決這個問(wen)題,它們(men)統一(yi)標準(zhun),包(bao)含所(suo)有國家的(de)大(da)多(duo)數(shu)的(de)字符(fu),這個標準(zhun)編(bian)碼(ma)就是(shi)(shi)Unicode,unicode開始制定的(de)時(shi)候(hou)計算機的(de)存儲容量得到了(le)(le)極(ji)大(da)的(de)發展,所(suo)以(yi)它直(zhi)接使用16個字符(fu)來表示(shi)一(yi)個字符(fu),那(nei)么(me)2^16=65536一(yi)共可以(yi)表示(shi)這么(me)多(duo)的(de)字符(fu),它將(jiang)整個編(bian)碼(ma)空間劃分為(wei)塊(kuai),每塊(kuai)為(wei)16的(de)倍數(shu),然后按(an)塊(kuai)進行分配。同時(shi)它保留了(le)(le)6400個碼(ma)點供本地化使用。但(dan)是(shi)(shi)它仍(reng)然存在一(yi)個問(wen)題,就是(shi)(shi)這65536仍(reng)然是(shi)(shi)不(bu)夠用啊,因為(wei)世(shi)界上(shang)有太多(duo)的(de)字符(fu)需要表示(shi)了(le)(le)。

隨著計算機的(de)發展,現在已經(jing)是64位的(de)了, 2^64據說(shuo)可(ke)以表示地球上的(de)每一(yi)粒沙子(zi),所以問題很(hen)好解決,只需要通(tong)過64位來表示不就(jiu)行了嗎?

但(dan)是此時(shi)還是存(cun)在一個問題,這(zhe)(zhe)個問題就是在之前的(de)(de)時(shi)候(hou)ascii使用(yong)7個字(zi)節就可以表示出(chu)常(chang)用(yong)的(de)(de)數字(zi)和字(zi)母(mu),那(nei)么現在使用(yong)64位來表示,豈不(bu)是太(tai)浪(lang)費空(kong)間(jian)了(le)嗎?不(bu)過沒有什(shen)么可以難(nan)倒科學(xue)家的(de)(de),科學(xue)家提出(chu)了(le)UTF-8編(bian)碼,這(zhe)(zhe)個是一個變長的(de)(de)字(zi)符(fu)編(bian)碼,它可以提高存(cun)儲空(kong)間(jian)的(de)(de)利用(yong)率。

首(shou)先(xian)它通過(guo)首(shou)字(zi)節來確定整個(ge)字(zi)符(fu)(fu)的(de)長度,然后除了字(zi)符(fu)(fu)首(shou)字(zi)節外,均以(yi)“10”開(kai)始,這個(ge)編碼太厲害了,能用7位表示(shi)的(de)堅決不(bu)用31位表示(shi),這樣既可以(yi)表示(shi)大(da)量的(de)字(zi)符(fu)(fu),又不(bu)會浪費太多的(de)空間,所以(yi)它能為了互聯(lian)網上(shang)占統治地(di)位的(de)字(zi)符(fu)(fu)集。


如圖所示(shi),我們可以看(kan)到字(zi)節(jie)1中前(qian)面的(de)數字(zi)本標識字(zi)符(fu)的(de)位(wei)數,當(dang)為0時表示(shi)7位(wei),當(dang)110時表示(shi)11位(wei),然后字(zi)節(jie)1之后的(de)所有字(zi)節(jie)均(jun)通過10開頭,這就(jiu)是它的(de)格(ge)式。

字符型就(jiu)是常常通過utf-8來進(jin)行(xing)表示,那么現(xian)在我們來說(shuo)說(shuo)在計算機中是怎么存儲數(shu)值型數(shu)據(ju)的,數(shu)值型分為兩種一種是定(ding)點(dian)(dian)數(shu),還有一種是浮點(dian)(dian)數(shu)。

其中定點(dian)數有三種情況,一(yi)(yi)種是整數、另(ling)一(yi)(yi)種是定點(dian)小數、還(huan)有一(yi)(yi)種是小數點(dian)位置(zhi)固(gu)定。

浮(fu)點數(shu)有一種(zhong)就是小數(shu)點位置浮(fu)動。

進制

下面我們(men)僅(jin)僅(jin)介紹整數(shu)(shu)。要(yao)想表示一(yi)個(ge)整數(shu)(shu),首先需(xu)要(yao)確定數(shu)(shu)制(zhi),比(bi)如在現實生(sheng)活中我們(men)常(chang)常(chang)使用的數(shu)(shu)值是10進制(zhi),但(dan)是在計算機中使用的是二進制(zhi):


我們先來看(kan)一下二進制和(he)十進制之間的轉換:

二進制轉成10進制


10進制轉成2進制


把十進(jin)制數(shu)轉換(huan)為二進(jin)制,對(dui)整數(shu)部分通過除(chu)2取余數(shu)來完成,對(dui)小(xiao)數(shu)部分通過乘以2取整數(shu)來完成。

整數(shu)(shu)有(you)正數(shu)(shu)和負(fu)數(shu)(shu)的區別,所以(yi)計(ji)算機中使用最高位(wei)來來表(biao)示(shi)正負(fu)數(shu)(shu),其(qi)中0表(biao)示(shi)整數(shu)(shu),1表(biao)示(shi)負(fu)數(shu)(shu)。其(qi)它(ta)位(wei)表(biao)示(shi)數(shu)(shu)據位(wei),比如:

正數7,在計算(suan)機中(zhong)用一個8位的二(er)進制(zhi)數來表示,是00000111,而負(fu)數-7,則(ze)用10000111表示

原碼、反碼、補碼

原碼

反碼

補碼

0000_0001

0000_0001

0000_0001

1000_0001

1111_1110

1111_1111

正數(shu)(shu)的(de)(de)原碼(ma)、反(fan)(fan)碼(ma)、補(bu)碼(ma)是一(yi)樣的(de)(de),而負數(shu)(shu)的(de)(de)反(fan)(fan)碼(ma)等于(yu)源碼(ma)除符號位取(qu)反(fan)(fan),補(bu)碼(ma)等于(yu)反(fan)(fan)碼(ma)在(zai)最低為(wei)加1。

這里就會產生(sheng)兩個(ge)問題,第一個(ge)問題,為(wei)什(shen)(shen)么(me)需要(yao)有反(fan)碼(ma)(ma)和(he)補(bu)碼(ma)(ma),它(ta)的意思是(shi)什(shen)(shen)么(me)?第二為(wei)什(shen)(shen)么(me)整數的反(fan)碼(ma)(ma)和(he)補(bu)碼(ma)(ma)和(he)源碼(ma)(ma)是(shi)一樣的。

首先在計算機中我們需要(yao)進行加減運算,但是會有下面的幾種情況出現(xian)

我們(men)來看看如果直接使用(yong)原碼進(jin)行加減是否(fou)可以?

1+(-1)=[0000_00001]+[1000_0001]=[1000_0010]=-2

我們(men)可以看到(dao)正數相加的時候毫無問題(ti),但(dan)是一旦出(chu)現負(fu)數的情況就完蛋(dan)了(le),我們(men)可以看到(dao)1-1可以看成是1+(-1)結果確不等(deng)于0,而是等(deng)于-2,這顯然不符合我們(men)的邏(luo)輯。

那么我們不使用源碼來表示了我們使用反碼來計算,

-1的原碼是[1000_0001]、反(fan)碼[1111_1110]

2的源碼(ma)是(shi)[0000_0010]、反碼(ma)[0000_0010]

-1+2=[1111_1110]+[0000_0010]=[0000_0000]=0

我們發現(xian)這也不符(fu)合邏輯(ji),-1+2應(ying)該等(deng)于0

那么下(xia)面(mian)我們再(zai)來使用補碼來試一下(xia):

-1的原碼是[1000_0001]、反碼[1111_1110]、補碼[1111_1111]

2的源碼(ma)是[0000_0010]、反碼(ma)[0000_0010]、補碼(ma)[0000_0010]

-1+2=[1111_1111]+[0000_0010]=[0000_0001]=1

我(wo)們(men)發現這(zhe)個是(shi)符(fu)號我(wo)們(men)的邏(luo)輯的,所以回答(da)第二個問題,為什么要有(you)補(bu)碼呢(ni)?這(zhe)就是(shi)因(yin)為只有(you)補(bu)碼可以保(bao)證我(wo)們(men)的加減(jian)運算(suan)是(shi)正確(que)的,但(dan)是(shi)為什么會出現這(zhe)種情(qing)況呢(ni)?


我們可(ke)以發現在負原(yuan)碼(ma)中每增加一個(ge)(ge)二(er)進(jin)(jin)制單位(wei)對(dui)(dui)應的(de)是(shi)遞減的(de)(1000_0001和1000——0000相比)按照道理來說1000_0001應該(gai)比1000_0000大,但是(shi)事實(shi)確相反,而正每增加一個(ge)(ge)二(er)進(jin)(jin)制單位(wei)對(dui)(dui)應的(de)真數是(shi)遞增的(de),這個(ge)(ge)符合我們的(de)需要(yao),為了解決負數的(de)這個(ge)(ge)問題,我們可(ke)以取反碼(ma)


我們(men)可以發現反碼(ma)滿足(zu)了負原(yuan)碼(ma)中每增加(jia)一個(ge)(ge)二(er)進制單位(wei)對應(ying)的(de)(de)(de)是(shi)遞增的(de)(de)(de)(1111_1110和1111_1111相比,1111_1111比1111_11110大),解決第(di)一個(ge)(ge)問(wen)題(ti)(ti)之后,還有第(di)二(er)個(ge)(ge)問(wen)題(ti)(ti),這個(ge)(ge)問(wen)題(ti)(ti)就是(shi)0的(de)(de)(de)問(wen)題(ti)(ti),因為沒(mei)有正0和負零的(de)(de)(de)說法(fa),但是(shi)上面確有正零和負零區別,這就導(dao)致(zhi)了重(zhong)復的(de)(de)(de)問(wen)題(ti)(ti),這個(ge)(ge)時候我們(men)發現當給負原(yuan)碼(ma)加(jia)1,那么0就統一了,如(ru)下所示(shi):


那么問題就解決了,那么還需要注意的是1000_0000這個反碼表示-128,所以(yi)補碼的表示范圍(wei)是[-128~127] ,這(zhe)樣一來(lai)256個二進制(zhi)正(zheng)好表示256個整(zheng)數

計算機還(huan)有一種(zhong)編(bian)碼(ma)表示(shi)是檢錯糾錯碼(ma)

  • 它能夠使編碼具有某種特征,通過檢查這種特征是否存在來判斷編碼是否正確

碼距的概念

碼(ma)距是指(zhi)任(ren)意(yi)兩(liang)個(ge)合法碼(ma)之間至少有幾個(ge)二進制位不相(xiang)同。

僅有(you)一位不(bu)同(tong)的(de)編(bian)碼是無糾錯(cuo)能力(li)的(de),例如用4位二(er)進制表示16種(zhong)狀態,則(ze)16種(zhong)編(bian)碼都用到了,此(ci)時碼距(ju)為1。任(ren)意一個(ge)編(bian)碼狀態的(de)四(si)位碼中的(de)一位或(huo)者幾位出錯(cuo),都會(hui)變成另外(wai)一個(ge)合(he)法碼,那(nei)么這種(zhong)編(bian)碼是沒有(you)檢錯(cuo)能力(li)的(de)。

若用(yong)4個二進制位(wei)表示(shi)8種合(he)(he)法(fa)的(de)狀態,那(nei)么就(jiu)可(ke)以(yi)只使用(yong)其中的(de)8個編(bian)碼來表示(shi),另外8個為(wei)非(fei)法(fa)編(bian)碼,那(nei)么合(he)(he)法(fa)的(de)碼距為(wei)2。因為(wei)此(ci)時任何一位(wei)出錯后都會成(cheng)為(wei)非(fei)法(fa)碼,這樣有檢測一位(wei)出錯的(de)能力。

合理增(zeng)大碼(ma)距,那(nei)么(me)就能(neng)提高錯誤的能(neng)力(li),但是會使用更(geng)多的二進制,增(zeng)加了電子路線(xian)的復雜(za)性和數(shu)據存儲、數(shu)據傳送的數(shu)量。

常(chang)用(yong)的檢錯糾錯碼有以下(xia)幾種:


檢錯糾錯過程如下:

先對原始數(shu)據(ju)使用校驗碼(ma)進(jin)行(xing)編(bian)碼(ma)(加(jia)進(jin)特征),然后(hou)(hou)傳輸,傳輸完(wan)成(cheng)之后(hou)(hou)進(jin)行(xing)譯碼(ma),然后(hou)(hou)判斷收到的(de)碼(ma)字(zi)是(shi)否有問題

下(xia)面我們講解一下(xia)奇偶校驗

原理(li)是在(zai)k位(wei)(wei)數據碼(ma)之外增(zeng)加1位(wei)(wei)校(xiao)驗位(wei)(wei),使(shi)得K+1位(wei)(wei)碼(ma)字中取值1的位(wei)(wei)數總(zong)保持為偶數(偶效驗)或奇數(寄校(xiao)驗),舉(ju)一個例(li)子:


對待傳輸數據(ju)10110110約定采(cai)用(yong)其校(xiao)驗時(shi),發送方所需要發送的校(xiao)驗碼為010110110,對于接(jie)收(shou)方來(lai)說,如果接(jie)收(shou)到的數據(ju)中’1’的個數不(bu)為奇數時,就會認為數據(ju)出(chu)錯。但是它并不(bu)知道哪里出(chu)錯了,也就是它沒有糾錯的能力。

在線客服
客服電話
  • 0755-23712116
  • 13310869691