2013-10-02 23 views
1

使用C#我很驚訝地發現C++的float沒有定義模運算符。顯然,按位運算符也不是。我決定學習更多,並去尋找一個圖表,哪些基本類型有運營商爲他們定義,哪些沒有,但我找不到那種性質的任何東西。爲每種基本類型定義了哪些運算符?

我知道所有的運營商,以及如何重載它們: http://en.wikipedia.org/wiki/C%2B%2B_operators

我不知道,但是,知道哪個運營商對各基地類型的定義。

+2

是不是在語言規範?也許不是所有的都在一個地方,但如果你看看每一種類型的部分,我希望它會說什麼操作符被定義。 – Barmar

+0

使用fmod()作爲浮點模數。並且按位運算符對於您的浮點數表示(尾數和指數之間的分配,許多操作系統允許您在運行時更改)都會過於具體。 – Bathsheba

+0

@Bathsheba哪個操作系統可以讓你做到這一點?我從來沒有見過一個。浮點由IEEE 754和硬件定義,而不是由操作系統定義。 – EJP

回答

1

所有運營商都爲整數類型(charshortintlonglong longenum)所定義。對於浮點類型(floatdoublelong double),你沒有%並沒有「按位」運營商:<<>>~&|^,因爲它們不用於浮點多大意義。例如,您對3.3^6.8有什麼期待? [1]或1.9 % 13.4? [1]在浮點除法中沒有「餘數」,所以很難設想它應該給出什麼。

正如在評論中提到的,fmod做了類似的事情%

[1]這些都是修辭問題,我不指望任何人提出一個很好的答案。

+0

Re [1]:人們確實想出了一個答案,因此'fmod'。 –

+0

根據這個問題,它的鏈接:http://stackoverflow.com/questions/1723575/how-to-perform-a-bitwise-operation-on-floating-point-numbers 按位操作可能是有用的浮點遺傳算法中的數字。我會假定浮動將默認支持按位運算。例如: reinterpret_cast float1(按位操作)reinterpret_cast float2 – Limne

+0

是的,操作按位操作的浮點數的COMPONENTS將是一個有效的事情 - 例如,通過以下方式使32位浮點負數:float f; f = 8.3f; * reinterpret_cast (&f)| = 0x80000000;' - 或者可以通過改變最低位或者通過提取和增加一個指數來操縱尾數來將其舍入向上/向上。但是這並不是在浮點數上使用位操作 - 它將浮點數中的位更改爲整數(或者是一組整數字段)。 –

相關問題