我們都知道在計算機中資料型別都有:
char(1),short(2),int(4),long(4/8),float(4),double(8)等內建型別,以及他們所佔的空間大小。
型別的意義:
1.使用這個型別開闢記憶體空間的大小(大小決定使用範圍)。
2.如何看待記憶體空間的視角。
型別歸類:
整形家族:
char
unsigned
char
signed
char
short
unsigned
short
signed
short
intunsigned
intsigned
intlong
unsigned
long
signed
long
浮點數家族:
float,double.
整形在記憶體中的儲存
先來了解一下原碼,反碼,補碼。
計算機中的符號數有三種表示方法,即原碼、反碼和補碼。三種表示方法 ,均有符號位和數值位兩部分,符號位都是用0表示「正」,用1表示負,而數 值位,三種表示方法各不相同。
原碼直接將二進位制按照正負數的形式翻譯成二進位制就可以。
反碼將原碼的符號位不變,其他位依次按位取反就可以得到了。
補碼反碼+1就得到補碼。
正數的原、反、補碼都相同
對於整形來說:資料存放記憶體中其實存放的是補碼。
#include
int main()
浮點型在記憶體中的儲存
任何資料在記憶體中都是以二進位制的形式儲存的,例如乙個short型資料1156,其二進位制表示形式為00000100
10000100,則在inter cpu架構的系統中,存放方式為 10000100(低位址單元)00000100(高位址單元),因為intel cpu是小端架構,但是對於浮點型資料在記憶體中的儲存都是根據ieee定製標準。
s = m*2^n;主要有三部分:符號位+階碼(n)+尾數(m),對於float其二進位制為32位,其中符號位1位,階碼8位,尾數23位。對於double型資料,其二進位制為64位,符號位1位,階碼11位,尾數52位。
階碼:採用移碼表示,對於float型資料其規定偏置量為127,階碼有正有負,對於8位二進位制,則其表示範圍為-128-127,double型規定為1023,其表示範圍為-1024-1023。比如對於float型資料,若階碼的真實值為2,則加上127後為129,其階碼表示形式為10000010。
尾數:有效數字位,即部分二進位制位(小數點後面的二進位制位),因為規定m的整數部分恒為1,所以這個1就不進行儲存了。
float型資料125.5轉換為標準浮點格式
125二進位制表示形式為1111101,小數部分表示為二進位制為 1,則125.5二進位制表示為1111101.1,由於規定尾數的整數部分恒為1,則表示為1.1111011*2^6,階碼為6,加上127為133,則表示為10000101,而對於尾數將整數部分1去掉,為1111011,在其後面補0使其位數達到23位,則為11110110000000000000000
則其二進位制表示形式為
010000101
11110110000000000000000,則在記憶體中存放方式為:
00000000 低位址
00000000
11111011
01000010 高位址
而反過來若要根據二進位制形式求算浮點數如0
10000101
11110110000000000000000
由於符號為為0,則為正數。階碼為133-127=6,尾數為11110110000000000000000,則其真實尾數為1.1111011。所以其大小為
1.1111011*2^6,將小數點右移6位,得到1111101.1,而1111101的十進位制為125,0.1的十進位制為1*2^(-1)=0.5,所以其大小為125.5。
同理若將float型資料0.5轉換為二進位制形式
0.5的二進位制形式為0.1,由於規定正數部分必須為1,將小數點右移1位,則為1.0*2^(-1),其階碼為-1+127=126,表示為01111110,而尾數1.0去掉整數部分為0,補齊0到23位00000000000000000000000,則其二進位制表示形式為
001111110
00000000000000000000000
由上分析可知float型資料最大表示範圍為1.11111111111111111111111*2^127=3.4*10^38
對於double型資料情況類似,只不過其階碼為11位,偏置量為1023,尾數為52位。
#include
using
namespace
std;
int main(int argc, char *argv)
在上面已經知道float型125.5在記憶體中存放方式為:
00000000 低位址
00000000
11111011
01000010 高位址
因此對於p和p+1指向的單元,其中儲存的二進位制數表示的十進位制整數為0;
而對於p+2指向的單元,由於為char型指標,為帶符號的資料型別,因此11111011,符號位為1,則為負數,由於在記憶體中二進位制是以補碼儲存的,所以其真值為-5.
資料在記憶體中的儲存
身為乙個天天處理資料的人,不得不說資料在記憶體中的儲存是必須要知道的問題。首先,資料在記憶體中的儲存涉及到作用域,儲存位置等方面的問題。根據資料的作用域,可將資料劃分為區域性變數和全域性變數 區域性變數的作用域為從定義開始到函式執行結束 全域性變數的作用域從程式開始到程式結束。計算機的記憶體分配可以...
資料在記憶體中的儲存
大端,把乙個數字高位位元組序的內容儲存到低位址,低位位元組序內容儲存到高位址處 小端,把乙個數字高位位元組序的內容儲存到高位址,低位位元組序內容儲存到低位址處 判斷乙個機器是大端還是小端?指標判斷 int checksys 聯合體 共用體 union un int main 這裡首先需要知道的是,例...
資料在記憶體中的儲存
1.整形家族 char unsigned char signed char short unsigned short int signed short int int unsigned int signed int long unsigned long int signed long int 2.浮...