经典算法-位运算

Posted huangliang-hb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经典算法-位运算相关的知识,希望对你有一定的参考价值。

// 只出现一次的数字
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
}

 

以上是关于经典算法-位运算的主要内容,如果未能解决你的问题,请参考以下文章

经典算法-位运算

数据结构与算法位运算经典题

数据结构与算法位运算经典题

C语言100个经典算法源码片段

算法 | 第5章 位操作相关《程序员面试金典》#yyds干货盘点#

Java千问:Java位运算经典应用