数据在计算机中的存储
1.大小端模式(字節序)
- 大小端的概念:數在內存中分字節存儲的先后順序。大端模式即數的低位存在高地址,高位存在低地址當中。而小端模式相反,低位存在低地址,高位存在高地址。比如0x1234,這里的高低位是從左往右的。0x12是高位,0x34是低位。
????? 1)大端模式:
低地址 -----------------> 高地址
0x12? |? 0x34? |? 0x56? |? 0x78
?????? 2)小端模式:
低地址 ------------------> 高地址
0x78? |? 0x56? |? 0x34? |? 0x12
?????? 3)常見大小端模式
一般操作系統都是小端,而通訊協議是大端的。
Big Endian : PowerPC、IBM、Sun
Little Endian : x86、DEC
ARM既可以工作在大端模式,也可以工作在小端模式。
- 如何判斷大小端程序:
?
BOOL IsBigEndian() {union NUM{int a;char b;}num;num.a = 0x1234;if( num.b == 0x12 ){return TRUE;}return FALSE; }??? 第二種方法利用聯合的性質,共享一段內存,以達到節省空間的目的,只存儲最大長度的變量。當給a賦值的時候,a和b的起始地址是一樣的,它們共享一段內存,取出b段的數字低地址若存的是高位,那么是大端模式。
- 大小端之間的轉換
主要思想是取出每個字節,然后將字節移動左移或右移。
#define BigtoLittle16(A) (( ((uint16)(A) & 0xff00) >> 8)|(( (uint16)(A) & 0x00ff) << 8))參考資料:http://blog.csdn.net/ce123_zhouwei/article/details/6971544
2.數據在內存中的存儲
- 2.1.原碼,反碼,補碼。
把一個數轉換為二進制在其前面添加符號位,0為正數,1為負數。稱為原碼。
正數的反碼是自身,負數的反碼是保持符號位不變,其余位取反。
補碼正數還是不變,負數是補碼+1。若是8位這補碼的范圍是[-128,127],其中-128為10000000,就不存在源碼中-0情形。
更詳細的解釋:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html
- 2.2.浮點數在計算機中的存儲。
浮點數存在小數點,但是計算機無法表示小數點,解決的方法是采用指數(科學計算法)的方式來表示,使得整數部分固定為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位,小數部分。
轉載于:https://www.cnblogs.com/dawnminghuang/p/3998938.html
總結
以上是生活随笔為你收集整理的数据在计算机中的存储的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux经常使用解压缩命令
- 下一篇: UVa 1626 (输出方案) Brac