格式說明符號g(g)在c標準中的說明是
翻譯過來就是
1.把輸出的值按照%e或者%f型別中輸出長度較小的方式輸出,僅當數值的指數小於-4或大於等於精度引數(預設值為6)時按%e(e)輸出(否則按%f輸出)。
2.(在選擇好輸出格式之後)尾部的零會被縮減。
3.(在選擇好輸出格式之後且0被縮減後)當小數點後面有乙個或多個數字時才顯示小數點。
下面是關於這些性質的演示
輸出結果:printf
("%g\n"
,0.00001);
printf
("%f\n"
,0.00001);
printf
("%e\n"
,0.00001);
printf
("%g\n"
,1234567.0);
printf
("%g\n"
,123456.0
);
1e-005
0.000010
1.000000e-005
1.23457e+006
123456
預設的精度為6所以%f與%e都顯示了小數點後6位,這沒問題。
指數小於-4所以%g轉化將其成了指數輸出,並且省略掉了本該輸出在小數點後面的6個零,並在之後略掉了後面的小數點。如果減少乙個0讓指數變為-4,則%g將會以%f的形式輸出並省略掉後面無效的0.
1234567的指數等於預設的精度6,故被按%e處理,而123456的指數5小於6故按%f處理。這裡為什麼變成了1.23457是因為
%g的精度既指明了使用%e所需要的指數大小,也指明了最大有效數字位數。
下面是預設精度下的截斷演示
輸出結果為printf
("%g\n"
,0.0000123456789);
printf
("%e\n"
,0.0000123456789
);
1.23457e-005
1.234568e-005
首先%e按照預設精度顯示小數點後6位,這沒問題。
對於%g,它按照預設的精度6從最大位開始截斷,也就是1.23456。然後消0去小數點(當然這裡沒有)。這裡的四捨五入是可能發生的,原理和用%.2f輸出1.555結果是1.55而3.555結果是3.56一樣,與浮點數的儲存機制有關。
接下來我們嘗試設定乙個精度,同時混用%e,%f的精度以及寬長限制為防止讀者混淆,看看輸出情況。
輸出結果printf
("%.3g\n"
,110.1);
printf
("%010.2g\n"
,110.1);
printf
("%010.2e\n"
,110.1);
printf
("%.2e\n"
,110.1);
printf
("%.2f\n"
,110.1
);
110001.1e+002
01.10e+002
1.10e+002
110.10
這裡從下往上開始說明。
%.2e:指點數值變為科學計數法後(即1.101x10的正2次方),然後取小數點後兩位得1.10x10的正2次方。
%010.2g:010的解釋和上面是一樣的,都是把e與+算在字寬內。因為110.1的指數為2,>=指定精度2,故被轉化成1.101x100。然後2作為擷取精度從右往左擷取(可能是四捨五入。要做到真正的四捨五入應該使用round函式或者a = int(a*100+0.5)/100.0之類的演算法,這裡不多做討論)兩位數變成了1.1,最終得到1.1e+002。
%.3g:這裡因為指數2小於3,故被轉化為%f,同時從右往左擷取3位數輸出,即110
最後是總結:對於乙個使用%g轉化說明的數值,不管其是指數小於-4或者大於等於精度引數(未指定的情況下預設為6)被轉成了%e,還是不滿足上述條件變成%f,都會先根據2,3進行簡化。在簡化後根據精度引數擷取至最大有效數字位數(假如精度過大則不會補0使其強制變為精度確定的有效數字位數)。
%g運算子因為其能夠自動簡化輸出中多餘的0與小數點,常用於不指定輸出格式的輸出中
關於C語言中 和 的用法
是邏輯或,例子如下 1 2 3 4 5 6 表示式1 表示式2 如果表示式1是true或者表示式2是true,整條式子的結果就是true,否則是false inta 0 boolz a 0 a 0 這個例子中條件a 0,所以整條表示式的結果是true,如果表示式1的結果是true,那結果也是true...
關於C語言中 和 的用法
是邏輯或,例子如下 1 2 3 4 5 6 表示式1 表示式2 如果表示式1是true或者表示式2是true,整條式子的結果就是true,否則是false inta 0 boolz a 0 a 0 這個例子中條件a 0,所以整條表示式的結果是true,如果表示式1的結果是true,那結果也是true...
關於C語言中 和 的用法
先說左移 左移就是把乙個數的所有位都向左移動若干位,在c中用 運算子.例如 int i 1 i i 2 把i裡的值左移2位 也就是說,1的2進製是000.0001 這裡1前面0的個數和int的位數有關,32位機器,gcc裡有31個0 左移2位之後變成 000.0100,也就是10進製的4,所以說左移...