匹配printf 說明符的型別

2021-07-25 17:28:28 字數 1228 閱讀 1860

第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 中 n格式說明符

一 遇到 n 昨天在寫scanf 的輸入異常處理時遇到了乙個從未見過的格式說明符 n sscanf str,d n v,c 從執行結果來看,c的值是str的長度。二 stack overflow 上關於 n 的qa 於是我在stack overflow上找到了關於這個格式說明符的qa。what is...

auto型別說明符

c 11新標準引入了auto型別說明符 用它能讓編譯器替我們分析表示式所屬的型別 auto讓編譯器通過初始值來推算出標量的型別。顯然auto定義的變數必須有初始值 auto item vall val2 item的型別通過val2和val1的相加的結果得出 使用auto也能在一條語句中宣告多個變數 ...

auto型別說明符

程式設計時,需要把表示式的值賦給變數,這就要求在宣告變數時清楚知道表示式的型別。為了解決這個問題,c 11引入auto型別說明符,用它就能讓編譯器替我們去分析表示式所屬的型別。auto讓編譯器通過初值來推算變數的型別。因此,auto定義的變數必須有初始值。auto能在一句中定義多個變數,但是這幾個變...