算法-位运算

目录

前言

位运算有的符号

按位异或性质:

指定位置的位运算

位运算算法常用点

实战


前言

机器是采用二进制对数值进行表示、存储和运输,在程序中恰当使用二进制,可以提高运行效率。本篇文章我们讲下位运算相关的问题。

位运算有的符号

含义 运算符 示例
按位与 & 1011 & 0011 = 0011
按位或 1011 | 0011 = 1011
按位取反 ~0011 = 1100
按位异或 ^ 1011 ^ 0011 = 1000 (相同得0不同得1)
左移 << 1<<0011 = 0110 (高位舍弃低位补0)
右移 >> 0011>>1 = 0001

按位异或性质:

x^0 = x x^x = 0 结合律:a^b^c = a^(b^c) = (a^b)^c 成对变换:x^1 (0^1=1,1^1=0;2^1=3,3^1=2;4^1=5,5^1=4) 交换两个数:a = a^b,b = a^b, a = a^b

指定位置的位运算

记住:二进制数最右边为第0位

获取x在二进制下的第n位(0或者1):(x>>n) & 1

x 在二进制下的第n位置为1: x| (1<

x 在二进制下的第n 位取反: x^(1<

x 在二进制下的第n位位置位0:x & (~(1<

将x 最右边的n位清零 x & (~0 << n)

将x最高位至第n位(含)清零: x&((1<

位运算算法常用点

x%2==1 -> (x&1) = 1 表示奇数

x%2==0 -> (x&1) ==0 表示偶数

除以2 的幂次

Mid:=(left+right)/2 = mid:=(left+right)>>1

得倒最低位的1: x & -x 或 x & (~x+1)

清零最低位的1: x & (x-1)

实战

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。

func hammingWeight(num uint32) int {
  nts := 0
  i := 0
  for num > 0 {
    if num & 1 == 1 {
      nts++
    }
    num = num >> 1
    i++
  }
  return nts
}

用到的知识点是 获取x在二进制下的第n位(0或者1):(x>>n) & 1。很简单

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false

func isPowerOfTwo(n int) bool {
    if n & (n-1) == 0 && n>0{
    return true
  }
  return false
}

你可能感兴趣的:(golang,算法,算法,数据结构,go)