C++基本資料型別直接的轉換
1、unsigned int轉換為int(內容不變,但是要分正負號)
unsigned int a = 65535; //11111111 11111111 11111111 11111111(原碼)
int b=a; //b = -1 //10000000 0000000000000000 00000001(補碼)
2、int、long轉換為char(低八位發生截斷存放到char)
int i=289; // 00000000 00000001 0010 0001
char c=i; // 0010 0001 ----- 33
long int轉換為int(原封不動存放到int)
3、char轉換為int
char型別轉換為無符號int型別,char的八位直接存放到int低位儲存單元,高位直接補0
char a = -1; //11111111 11111111
unsigned int b=a; //00000000 00000000 11111111 11111111
char型別轉換為有符號int型別,char的八位直接存放到int低位儲存單元,高位進行符號擴充套件
char a = -1; //11111111 11111111
int b = a; //11111111 11111111 11111111 11111111 ---- -1
4、浮點數儲存
符號位 階碼(指數位) 尾數(小數位) 指數偏移量
單精度浮點數 1位[31] 8位 [30-23] 23位 [22-00] 127
雙精度浮點數 1 位[63] 11 位[62-52] 52 位[51-00] 1023
例:float型浮點數125.5轉化成32位二進位制浮點數
125.5的二進位制碼為1111101.1,
寫成二進位制的科學計數為:1.111101*2^6(因為科學計數法“整數”部分大於1,在二進位制中,“整數”部分只能恆為1)即向左移6位;
則e=6,則E=e+127=133,而E的二進位制碼為10000101,而1.111101把“整數”部分去除1之後為111101,之後補0,共23b,形成了階碼。
所以125.5的32位二進位制浮點數為 0 1000010111110100000000000000000