簡單地放入C和變體(與虛擬機不同,wuss java不同),不同目標上的原始類型的大小可能差別很大,除非您使用stdint.h
中定義的固定寬度類型,你的實現必須支持他們。是否sizeof返回C中的字節數或類型的八位字節數?
無論如何假設(因爲在大多數現代機器上,一個字節是一個八位字節,爲了網絡的目的,我假設(ASCII))sizeof返回字節或八位字節的數據類型的大小?
簡單地放入C和變體(與虛擬機不同,wuss java不同),不同目標上的原始類型的大小可能差別很大,除非您使用stdint.h
中定義的固定寬度類型,你的實現必須支持他們。是否sizeof返回C中的字節數或類型的八位字節數?
無論如何假設(因爲在大多數現代機器上,一個字節是一個八位字節,爲了網絡的目的,我假設(ASCII))sizeof返回字節或八位字節的數據類型的大小?
答案:sizeof
返回類型的大小在字節。
示例:sizeof(char)
是100%保證是1
,但是這並不意味着,它的一個八位字節(8個比特)。
由標準實踐證明:
在6.5.3.4,點2:其操作數的
sizeof運算符產生的尺寸(以字節爲單位),其可以是 表達式或類型的括號內的名稱。大小由操作數的類型 決定。結果是一個整數。如果操作數的類型是可變長度數組 類型,則評估操作數;否則,操作數不會被評估,結果是一個整數常量 。
...
當應用於具有類型char,無符號的字符,或符號的字符, (或一個合格音響ED版本物)的結果是1一個操作數。當應用於數組類型爲 的操作數時,結果爲數組中的字節總數)應用於具有結構或聯合類型的操作數 時,結果爲此類對象中的總字節數 包括內部和尾部填充。
另外,在第3.6節,第3點:
一個字節的比特位構成的連續序列的,其數目是實現定義
非常全面,謝謝你。 – awiebe 2012-08-08 16:37:39
sizeof
總是返回大小作爲字節數。但根據wikipedia:
在編程語言C和C++,一元運算符的sizeof用於計算任何數據類型的大小,在以代表類型所需要的字節數來測量。在這個上下文中的字節與無符號字符相同,並且可能大於8位,儘管這是罕見的。
sizeof
給出了大小以字節表示。但是請注意,「字節」是C標準中的一個技術術語,其定義如下:sizeof(char) == 1
。
從我自己的經驗,在嵌入式微控制器,具有異國情調的 'C' 編譯器的工作,我已經看到了:
sizeof(uint8)
回報1
sizeof(uint16)
回報1
sizeof(uint32)
返回2
顯然,我正在處理一臺機器是最小的可尋址實體是16位,所以sizeof不符合C89或C99。
我會說主流C89 &符合C99的系統,接受的答案是正確的。 不幸的是,「C」編譯器仍然可以稱爲「C」編譯器,即使它不符合25年前的標準。我希望這個答案有助於在給定更多異域系統的情況下進行透視。
字節,但是一個字節(表示爲char)具有CHAR_BITS位。如果你需要'T'中的八位位組數,請執行'sizeof(T)* CHAR_BITS/8'。在大多數平臺上,'CHAR_BITS'是'8'。 – GManNickG 2012-08-08 15:46:17
@GManNickG'CHAR_BIT'(沒有S):) – Praetorian 2012-08-08 15:55:45
float octetPercent = sizeof(T)* CHAR_BIT /8.0; – awiebe 2012-08-08 16:05:55