1. 程式人生 > >C++基本資料型別直接的轉換

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