一、可移植型別舉例
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大資料學習視頻禮包

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/9968.html
標籤:C
