C連載11-可移植類型、double、float

1、可移植類型舉例

1.系統不支持「精確寬度整數類型」怎麼辦?

最小寬度類型:一些類型名保證所表示的類型必定是至少有指定寬度的最小整數類型。git

  • 使用上述定義的類型,例如:int_least8_t是能夠容納8位有符號整數值類型中的寬度最小的類型的一個別名,若是某系統的最小整數類型是16位,可能不會定義int8_t類型。儘管如此,該系統可能然會使用int_least8_t類型,可是可能把該類型實現爲16位整數類型。

2.打印類型的轉換有使用%d也有%ld的,該怎麼辦?

  • C語言提供了一些字符串宏來顯示可移植類型。
  • 例如:inttypes.h頭文件中定義了PRId32字符串宏,表明打印32位有符號值的合適轉換說明。
#include<stdio.h>
#include<inttypes.h>  //支持可移植類型
int D11_1_altnames(void) {
 int32_t me32;  //me32是一個32爲有符號的整形變量
 me32 = 45933945;
 printf("First,assume int32_t is int:");
 printf("me32 = %d\n", me32);
 printf("Next,let's not make any assumptions.\n");
 printf("Instead,use a \"macro\" from inttpes.h:");
 printf("me32 = %" PRId32 "\n", me32);

 return 0;
}
 

運行結果
11.1 github

釋義
在程序的最後一個printf()中,參數PRI32被定義在inttypes.h中的d所替換,於是這條語句等價於微信

printf("me32 = %""d""\n",me32);

在C語言中,能夠把多個連續的字符串組成一個字符串,依然等價於編輯器

printf("me32 = %d\n",me32);

2、float、double、long double

1.C中的規定

  • C規定float類型必須至少能表示6位有效數字,且取值範圍至少爲10^-3710^37
  • 一般系統存儲一個浮點數要佔用32位,其中8位用於存儲指數的值和符號,其他24位表示非指數部分及其符號(也稱爲尾數或者有效數)。
  • double佔用64位而不是32位,不一樣系統多出來的32位有的用於表示指數,擴大表示範圍;有的用於表示有效數字部分,提升精度。
  • long double來知足更高精度的要求,然而C只保證long double類型至少與double類型精度相同。

2.浮點型常量

  • 能夠這樣表示3.1541.24e12.8E12100.

注意點:不要在浮點型常量中間加空格,如:8.3 E12和這樣是錯的學習

  • 浮點數默認是double類型,若是是float須要後綴加F或f;若是是long double須要後綴加L或l
  • C99標準添加了一種新的浮點型常量格式——用十六進制表示浮點型常量, 即在十六進制數前面加上0x或0X,用p和P分別替代e和E,用2的冪代替10的冪,·如:0x1.ap12,但並不是全部編譯器支持這個特性。

3、源碼:

相關文章
相關標籤/搜索