經典演算法-位運算
阿新 • • 發佈:2020-08-05
// 只出現一次的數字 func singleNumber(nums []int) int { num := 0 for _, v := range nums { num ^= v } return num } // 二進位制中1的個數 func hammingWeight(num uint32) int { sum := 0 for ; num > 0; num >>= 1 { if num & 1 == 1 { sum++ } } returnsum } // 兩數相加(不使用加減乘除) func twoSum(a, b int) int { for b != 0 { a, b = a^b, a&b<<1 } return a } // 交換兩個整數a,b值 func Exchange(a, b int32) (int32, int32) { a = a ^ b b = b ^ a a = a ^ b return a, b } // 編寫隨機數函式 func randnum(n int) int { rand.Seed(time.Now().UnixNano()) num := 0 for i := 0; i < int(math.Ceil(math.Log2(float64(n)))); i++ { a := rand.Intn(2) // 隨機0或1 if a == 1 { num |= a << i } } if num < n { return num } return n } 遊戲專案常用到的 userId |= sererNo << 18 // update 設定 vip |= 0x1 << flag// get 獲取 func (p *Player) GetCommonFlag(flag uint32) int32 { return vip >> flag & 0x1 }