2014-03-30 69 views
0

我總是看到有人寫for(int ii = 0; ii < 50; ii ++)爲(INT II或(II字符用C?

但對於數< 256,爲什麼沒有人寫char ii,而不是int ii因爲它肯定,這將是8位而不是更多?

+1

你真的在意嗎? – gongzhitaao

+2

'50'是一個'int'(所以是'0');如果您使用'char'作爲控制變量,那麼您將強制編譯器在每次比較時執行額外的轉換(當然,編譯器可以優化轉換)。 – pmg

+5

*因爲它肯定會是8位而不是更多*這是錯誤的。 'char'不一定是8位,即使它是,也不能保證能夠保持255位,因爲實現可能使用普通符號字符。例如,'for(char ii = 0; ii <255; ii ++)'是危險的,只能在具有無符號字符的平臺上按預期工作。 –

回答

5

C將所有小於int的值的算術運算轉換爲int值,並且編譯器可能會將ii放入寄存器中,所以選擇較小的類型將不會贏得任何東西。可能由於不斷轉換回(char)而變得更糟。

接下來,你有一個問題:char只能保證上升到127,所以255會超出範圍。你將不得不去unsigned char。

這並不意味着在您的示例循環中。對於這個,編譯後最有可能沒有區別。