一、可移植類型舉例 1.系統不支持“精確寬度整數類型”怎麼辦? 最小寬度類型:一些類型名保證所表示的類型一定是至少有指定寬度的最小整數類型。 使用上述定義的類型,例如:int_least8_t是可以容納8位有符號整數值類型中的寬度最小的類型的一個別名,如果某系統的最小整數類型是16位,可能不會定義i ...
一、可移植類型舉例
1.系統不支持“精確寬度整數類型”怎麼辦?
最小寬度類型:一些類型名保證所表示的類型一定是至少有指定寬度的最小整數類型。
- 使用上述定義的類型,例如:
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; }
運行結果
釋義
在程式的最後一個printf()
中,參數PRI32
被定義在inttypes.h
中的d
所替換,因而這條語句等價於
printf("me32 = %""d""\n",me32);
在C語言中,可以把多個連續的字元串組成一個字元串,依然等價於
printf("me32 = %d\n",me32);
二、float、double、long double
1.C中的規定
- C規定float類型必須至少能表示6位有效數字,且取值範圍至少為
10^-37
到10^37
- 通常系統存儲一個浮點數要占用32位,其中8位用於存儲指數的值和符號,其餘24位表示非指數部分及其符號(也稱為尾數或者有效數)。
- double占用64位而不是32位,不同系統多出來的32位有的用於表示指數,擴大表示範圍;有的用於表示有效數字部分,提高精度。
- long double來滿足更高精度的要求,然而C只保證long double類型至少與double類型精度相同。
2.浮點型常量
- 可以這樣表示
3.1541
、.2
、4e12
、.8E12
、100.
註意點:不要在浮點型常量中間加空格,如:
8.3 E12
和這樣是錯的
- 浮點數預設是double類型,如果是float需要尾碼加F或f;如果是long double需要尾碼加L或l
- C99標準添加了一種新的浮點型常量格式——用十六進位表示浮點型常量, 即在十六進位數前面加上0x或0X,用p和P分別替代e和E,用2的冪代替10的冪,·如:
0x1.ap12
,但並非所有編譯器支持這個特性。
三、源碼:
- D11_1_altnames.c
- https://github.com/ruigege66/CPrimerPlus/blob/master/D11_1_altnames.c
- CSDN:https://blog.csdn.net/weixin_44630050
- 博客園:https://www.cnblogs.com/ruigege0000/
- 歡迎關註微信公眾號:傅里葉變換,個人賬號,僅用於技術交流,後臺回覆“禮包”獲取Java大數據學習視頻禮包