還需指正的「資料的儲存」

2021-10-23 04:04:05 字數 3217 閱讀 2749

變數的建立要在記憶體中開闢空間,空間的大小根據型別的種類而決定。

比如:

int a =20;

int b =-10

;

我們知道這為a分配了4個位元組的空間,那麼是如何儲存的呢?

接下來我們先來了解一下原碼、反碼、補碼的概念

計算機的有符號數有三種表示方法,即原碼、反碼、補碼。

三種方法均有符號位數值位兩部分,符號位都是用0表示「正」,用1表示「負」,而數值位三種表示方法各不相同。

原碼直接將二進位制按照正負數的形式翻譯成二進位制就可以。

反碼將原碼的符號位不變,其他位依次按位取反就可以了。

補碼反碼+1就得到補碼。

正數的原、反、補碼都相同。

對於整形來說:資料存放在記憶體中的其實是補碼。

大小端介紹

大端(儲存)模式:指資料的低位儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中;

小端(儲存)模式:指資料的低位儲存在記憶體的低位址中,而資料的高位,儲存在記憶體的高位址中

下面就來說明這兩種模式:

big-endian:低位址存放高位,如下:

高位址  

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

buf[3] (0x78) – 低位  

buf[2] (0x56)  

buf[1] (0x34)  

buf[0] (0x12) – 高位

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

低位址

little-endian: 低位址存放低位,如下:

高位址---------------

buf[3] (0x12) – 高位

buf[2] (0x34)

buf[1] (0x56)

buf[0] (0x78) – 低位

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

低位址

我們再介紹一下常見型別在記憶體中所儲存空間的大小

char 開闢空間的大小為 -128 ~ 127

unsigned char 則為 0 ~ 255

int -231 ~ 231-1

unsigned int 0 ~ 231-1

void表示空型別(無型別)

它無法定義變數,因為它無法開闢空間,即在記憶體中沒有儲存空間的大小。

常見的浮點數:

3.1415926 1e10 浮點數家族包括:float、double、long double型別。浮點數表示範圍:float.h中定義。

舉例來說:

十進位制的5.0,寫成二進位制是 101.0 ,相當於 1.01×22 。 那麼,按照上面v的格式,可以得出s=0, m=1.01,e=2。

十進位制的-5.0,寫成二進位制是-101.0 ,相當於-1.01×22 。那麼,s=1,m=1.01,e=2。

ieee 754規定: 對於32位的浮點數,最高的1位是符號位s,接著的8位是指數e,剩下的23位為有效數字m。

對於64位的浮點數,最高的1位是符號位s,接著的11位是指數e,剩下的52位為有效數字m。

ieee 754對有效數字m和指數e,還有一些特別規定。前面說過, 1≤m<2 ,也就是說,m可以寫成 1.****** 的形 式,其中******表示小數部分。

ieee 754規定,在計算機內部儲存m時,預設這個數的第一位總是1,因此可以被捨去,只儲存後面的******部分。 比如儲存1.01的時候,只儲存01,等到讀取的時候,再把第一位的1加上去。這樣做的目的,是節省1位有效數字。 以32位浮點數為例,留給m只有23位,將第一位的1捨去以後,等於可以儲存24位有效數字。

至於指數e,情況就比較複雜。

首先,e為乙個無符號整數(unsigned int)這意味著,如果e為8位,它的取值範圍為0~255;如果e為11位,它的 取值範圍為0~2047。但是,我們知道,科學計數法中的e是可以出現負數的,所以ieee 754規定,存入記憶體時e的真 實值必須再加上乙個中間數,對於8位的e,這個中間數是127;對於11位的e,這個中間數是1023。比如,2^10的e 是10,所以儲存成32位浮點數時,必須儲存成10+127=137,即10001001。

然後,指數e從記憶體中取出還可以再分成三種情況:

e不全為0或不全為1

這時, 浮點數就採用下面的規則表示,即指數e的計算值減去127(或1023),得到真實值,再將有效數字m前加上第一位的1。

比如: 0.5(1/2)的二進位制形式為0.1,由於規定正數部分必須為1,即將小數點右移1位, 則為1.0*2^(-1),其階碼為-1+127=126,表示為01111110,而尾數1.0去掉整數部分為0,補齊0到23位 00000000000000000000000,則其二進位制表示形式為:

0 01111110 00000000000000000000000
e全為0

這時,浮點數的指數e等於1-127(或者1-1023)即為真實值, 有效數字m不再加上第一位的1,而是還原為 0.******的小數。這樣做是為了表示±0,以及接近於0的很小的數字。

e全為1

這時,如果有效數字m全為0,表示±無窮大(正負取決於符號位s);

優美數,自己的思想,求指正

如果乙個數中只有少於三個數字是非零的,那麼我們稱這個數為優美數,我們定義這個優美數的優美程度為這個數所有數字相加的和。例如優美數有4,200000,10203,其中4的優美度是4,200000的優美度是2,10203的優美度是6.數字4231,102306,7277420000,就不是囉。現在問在 ...

區塊鏈技術在資料儲存上的應用還需要繼續努力

區塊鏈技術從2017年開始就受到各行各業的關注。2018年,是區塊鏈技術厚積薄發的3.0時代,是區塊鏈技術的各種應用開始落地的時候,也正是利用區塊鏈技術重塑行業市場的大好時機。雖然從客觀上講,區塊鏈技術仍處於發展階段,還沒有真正完全實現落地應用。可也正是在這個時期中,蘊藏著無限的可能與商機 許多業內...

資料的儲存

1.整形在記憶體中的儲存 1 在計算機系統中,整數統一用補碼來表示和儲存。原碼 直接將二進位制按照正負數的形式翻譯成二進位制。反碼 將原碼的符號位不變,其他位按位取反。補碼 反碼加1就得到補碼。正數的原碼,反碼,補碼都相同 2 在記憶體中儲存時,還有大小端儲存方式 大端 儲存 模式,是指資料的低位儲...