1. 程式人生 > 實用技巧 >經典演算法-位運算

經典演算法-位運算

// 只出現一次的數字
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++
        }
    }
    return
sum } // 兩數相加(不使用加減乘除) 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 }