使用C#我很驚訝地發現C++的float沒有定義模運算符。顯然,按位運算符也不是。我決定學習更多,並去尋找一個圖表,哪些基本類型有運營商爲他們定義,哪些沒有,但我找不到那種性質的任何東西。爲每種基本類型定義了哪些運算符?
我知道所有的運營商,以及如何重載它們: http://en.wikipedia.org/wiki/C%2B%2B_operators
我不知道,但是,知道哪個運營商對各基地類型的定義。
使用C#我很驚訝地發現C++的float沒有定義模運算符。顯然,按位運算符也不是。我決定學習更多,並去尋找一個圖表,哪些基本類型有運營商爲他們定義,哪些沒有,但我找不到那種性質的任何東西。爲每種基本類型定義了哪些運算符?
我知道所有的運營商,以及如何重載它們: http://en.wikipedia.org/wiki/C%2B%2B_operators
我不知道,但是,知道哪個運營商對各基地類型的定義。
所有運營商都爲整數類型(char
,short
,int
,long
,long long
和enum
)所定義。對於浮點類型(float
,double
和long double
),你沒有%
並沒有「按位」運營商:<<
,>>
,~
,&
,|
和^
,因爲它們不用於浮點多大意義。例如,您對3.3^6.8
有什麼期待? [1]或1.9 % 13.4
? [1]在浮點除法中沒有「餘數」,所以很難設想它應該給出什麼。
正如在評論中提到的,fmod
做了類似的事情%
。
[1]這些都是修辭問題,我不指望任何人提出一個很好的答案。
Re [1]:人們確實想出了一個答案,因此'fmod'。 –
根據這個問題,它的鏈接:http://stackoverflow.com/questions/1723575/how-to-perform-a-bitwise-operation-on-floating-point-numbers 按位操作可能是有用的浮點遺傳算法中的數字。我會假定浮動將默認支持按位運算。例如: reinterpret_cast
是的,操作按位操作的浮點數的COMPONENTS將是一個有效的事情 - 例如,通過以下方式使32位浮點負數:float f; f = 8.3f; * reinterpret_cast
是不是在語言規範?也許不是所有的都在一個地方,但如果你看看每一種類型的部分,我希望它會說什麼操作符被定義。 – Barmar
使用fmod()作爲浮點模數。並且按位運算符對於您的浮點數表示(尾數和指數之間的分配,許多操作系統允許您在運行時更改)都會過於具體。 – Bathsheba
@Bathsheba哪個操作系統可以讓你做到這一點?我從來沒有見過一個。浮點由IEEE 754和硬件定義,而不是由操作系統定義。 – EJP