我需要一種跨體系結構的方式來確保浮點數爲4個字節(就像在32位窗口上一樣)。例如,在我創建的結構中,我使用而不是int
來確保一個長度爲4個字節的整數值。確保浮點大小爲4字節的C++
我怎麼能用浮子做這個?我知道我可以用類型替換該值;然而,當在64位系統上強制轉換爲float時,我不會遇到問題嗎?
我需要一種跨體系結構的方式來確保浮點數爲4個字節(就像在32位窗口上一樣)。例如,在我創建的結構中,我使用而不是int
來確保一個長度爲4個字節的整數值。確保浮點大小爲4字節的C++
我怎麼能用浮子做這個?我知道我可以用類型替換該值;然而,當在64位系統上強制轉換爲float時,我不會遇到問題嗎?
我需要一個跨架構的方法來確保float將是4個字節
對於浮點值,沒有類似int32_t
。
實現所需目標的唯一跨平臺方法是使用運行時或靜態斷言進行測試。
#include <cassert>
int main() {
assert(sizeof(float) == 4);
// If control reaches this line, then you've
// ensured that float is 4 bytes.
// rest of your program goes here
}
由於浮點數據大小與CPU有關,所以沒有符合標準的方法來執行此操作。 IEEE-754
標準(支持浮點的所有處理器都使用我所知)將單精度浮點值定義爲4字節。
沒有標準提及的原因是因爲C的編寫者不想將自己綁定到浮點的特定實現上,以防標準更改或更新。而且還因爲CPU決定了單精度浮點數和雙精度浮點數的大小和實現,所以它不是編譯器關心的問題。
如果您擔心,可以使用static_assert
以確保sizeof(float) == 4
;不過,這不是你要碰到的問題,我不會想象。如果是這樣,你應該在個案的基礎上處理它(這實際上是一個逐架構的基礎)。
這很合理。我將不得不更多地閱讀IEEE-754標準(每個人都會圍繞這些標準進行討論,但我仍然試圖瞭解它們是什麼以及它們如何相互配合)。 – Qix 2012-07-16 02:39:20
如果你還在身邊,你應該把接受的答案提供給Rob-phi。我只是擴大了他的答案。 – OmnipotentEntity 2012-07-16 02:45:43
該標準甚至不保證存在4字節的'float'。但是我想象一下,找到一個sizeof(float)!= sizeof(int32_t)''的架構是非常困難的。 – Mysticial 2012-07-16 02:16:51
我有個壞消息:'__int32'不是跨平臺的。 – 2012-07-16 02:18:10
*旁白*:'__int32'不保證存在於每個(或任何)系統上。改爲嘗試'int32_t'。 – 2012-07-16 02:18:16