資料在計算機中的儲存(位元組序,浮點數)

2021-06-26 00:50:33 字數 1415 閱讀 6278

1)大端模式:

低位址 -----------------> 高位址 

0x12  |  0x34  |  0x56  |  0x78

2)小端模式:

低位址 ------------------> 高位址 

0x78  |  0x56  |  0x34  |  0x12

3)常見大小端模式

一般作業系統都是小端,而通訊協議是大端的。

big endian : powerpc、ibm、sun 

little endian : x86、dec 

arm既可以工作在大端模式,也可以工作在小端模式。

bool isbigendian()

return false;

}

bool isbigendian()

num;

num.a = 0x1234;

if( num.b == 0x12 )

return false;

}

第二種方法利用聯合的性質,共享一段記憶體,以達到節省空間的目的,只儲存最大長度的變數。當給a賦值的時候,a和b的起始位址是一樣的,它們共享一段記憶體,取出b段的數字低位址若存的是高位,那麼是大端模式。

主要思想是取出每個位元組,然後將位元組移動左移或右移。

#define bigtolittle16(a)   (( ((uint16)(a) & 0xff00) >> 8)|(( (uint16)(a) & 0x00ff) << 8))
參考資料:

把乙個數轉換為二進位制在其前面新增符號位,0為正數,1為負數。稱為原碼。

正數的反碼是自身,負數的反碼是保持符號位不變,其餘位取反。

補碼正數還是不變,負數是補碼+1。若是8位這補碼的範圍是[-128,127],其中-128為10000000,就不存在原始碼中-0情形。

更詳細的解釋:

浮點數存在小數點,但是計算機無法表示小數點,解決的方法是採用指數(科學計算法)的方式來表示,使得整數部分固定為1,這樣浮點數就可以分成三個部分來表示,第乙個部分是符號位,第二部分是指數字,第三部分是小數字。

例:以32位的浮點數為例說明一下

求129.5在計算機中的儲存

先將整數和小數部分分別表示為二進位制10000001.1,用科學計算法表示,1.00000011*2^7,符號位0,指數部分為7加上偏移127為134,二進位制為10000110,小數部分為10000000000000000000000(23位),結果為01000011010000000000000000000000

sign:1位,正數為0,負數為1.

exponet:8位,要加上127(為了表示那些指數為負數的浮點數),再轉換為二進位制。

fraction:23位,小數部分。

計算機中的位元組序問題

地點 基地 程式設計中的資料型別有很多事跨多個位元組的,比如char是用乙個位元組表示,而諸如int,float型別則用4個位元組表示double則用8個位元組表示,我們知道,資料物件例項是儲存在一定位址單元中的,我們也知道,儲存器中的每個位元組都由乙個唯一的位址標誌或者是儲存。那麼當資料物件跨多個...

浮點型在計算機中的儲存表示

之前一直不明白float在計算機中是如何儲存的,今天下決心 float型別資料 4byte 1bit 符號位 23bti 尾數字 8bit 指數字,範圍 127 128 double型別資料 8byte 1bit 符號位 52bti 尾數字 11bit 指數字,範圍 1023 1024 乙個浮點數可...

浮點數在計算機中的儲存

float和double在儲存方式上遵從ieee規範!例如 8.25 整數部分 除2取餘倒排 除法商餘數 8 24 04 220 2 21 01 201 餘數倒排 1000 小數部分 乘2取整順排 乘法 積整數部分 0.25 2 0.50 0.5 2 1.01 整數部分順排 01 前兩步結合的結果為...