一提到二進制,我們通常認為他的運算速度應(yīng)該會很快,因為更接近于底層;那么今天我們就來做一個測試,這次二進制可能要摔跟頭了!
爭端是這樣的:判斷一個數(shù)值的奇偶性,二進制運算快還是求余運算快(一篇CSDN的博客的結(jié)論是二進制運算會快的多)
那么讓我們來寫一個基準(zhǔn)測試:
package test
import (
"testing"
)
func BenchmarkEr(t *testing.B) {
var n uint64 = 1 << 63
t.ResetTimer()
for i := 0; i < t.N; i++ {
if n&1 == 1 {
}
}
}
func BenchmarkYu(t *testing.B) {
var n uint64 = 1 << 63
t.ResetTimer()
for i := 0; i < t.N; i++ {
if n%2 == 0 {
}
}
}
結(jié)果如下(說明這兩種算法在效率上根本沒有什么差別):

image.png
結(jié)論:二進制當(dāng)然有其優(yōu)勢,單并不是所有的二進制運算都是高效率的;這里除了證明這樣的結(jié)論,更重要的是,在coding時善于做測試,養(yǎng)成好習(xí)慣。