匹配printf()说明符的类型
第1問題:
打印結果如下:
通常,在程序代碼中使用2345這樣的數字時,它以int類型存儲。當使用1000000這樣的數字int類型不能表示時,編譯器會視為long int類型(假定這種類型可以表示該數字),如果數字大于long類型的最大值,C會視其為unsigned long類型。如果仍然不夠,C會視其為long long類型或者unsigned long long類型(如果有這些類型的話)。
第2問題:
下面是在某系統上的執行結果:
這個例子表明如果使用了不正確的說明符,會造成意想不到的結果。首先,對無符號變量un使用%d說明符號會導致顯示負值!這是由于在程序運行的系統中,無符號數3000000000和有符號數-129496296在內存中的表示方法一樣。所以,如果告訴printf()函數該值是無符號的,它將打印某個值;而告訴printf()函數該函數是有符號的,它將打印另外一個值。在數值大于有符號類型最大值的時候會發生這種情況。對于小一些的整數(比如96),有符號和無符號類型的存儲和顯示都是相同的。
其次,不論使用%hd還是%d,short類型變量end的顯示結果相同。這是因為在傳遞函數參數時C自動將short類型的值轉換為int類型。這會在您的腦子里引起兩個疑問:為什么要進行這樣的轉換?h修飾符的用處是什么?第一問題的答案是:int 類型被認為是計算機處理最方便有效的整數類型,所以在short類型和int類型長度不同的系統中,使用int類型值進行參數傳遞的速度更快;第二個問題的答案是:可以使用h修飾符顯示一個較長的整數被截為short類型的樣子(short在16位系統的取值范圍為32767~(-32768)),輸出的第三行就演示了這一點。把值65537按照二進制格式寫為一個32位的數字時,它應該0000000000000001 0000000000000001在printf()中使用%hd說明符將使它只顯示后16位,即顯示值1。與此類似,最后一行輸出先顯示了verybig變量的完整值,然后通過使用%ld說明符顯示了在它的后32位中的值。
總結
以上是生活随笔為你收集整理的匹配printf()说明符的类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32移植RT-Thread后的串口
- 下一篇: 流水灯实例,点亮发光管LED并闪烁(查表