2012-07-11 41 views
1

有沒有一種快速的方法來查找是否32位整數是4的倍數而不使用%運算符(在C++中)?快速找到4的倍數

+4

如果你想C++解決方案,你爲什麼要標記C? – Jack 2012-07-11 15:48:08

+1

爲什麼不使用'%'運算符?當你有一個專門用於準備工作的工具時,你必須想知道什麼時候有人特意堅持不使用它。 – 2012-07-11 15:59:32

+0

我認爲%運算符會很慢,因爲它使用了鴻溝(我認爲?) – 2012-07-11 16:18:47

回答

22

是的,有。

((i & 3) == 0) 

請注意,這可能不會更快。另外一個好的優化編譯器會將你的模數與常數4轉換爲最快的操作,所以它可以自動產生這個。

如果您有興趣,請檢查生成的代碼。

+0

+1「檢查生成的代碼」 – 2012-07-11 15:49:10

+0

它實際上並沒有保證能夠用C++標準工作,儘管只是出於一個不太可能的原因,即C++實現允許使用1s的負整數表示形式。 – 2012-07-11 16:14:37

+0

我在GCC 4.6.3上測試過,並且生成了相同的代碼。編譯器足夠聰明,可以知道一個2的冪的恆模與一個小於該平臺模數的按位AND相同。 (有趣的是,x86_64上的'andl'和x86_32上的'testb'。 – 2012-07-11 20:42:39