码迷,mamicode.com
首页 > 编程语言 > 详细

经典算法-位运算

时间:2020-08-05 19:44:02      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:amp   随机数   两数相加   func   游戏   经典   编写   进制   user   

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

 

经典算法-位运算

标签:amp   随机数   两数相加   func   游戏   经典   编写   进制   user   

原文地址:https://www.cnblogs.com/huangliang-hb/p/13441578.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!