当前位置:   article > 正文

golang 位运算

golang 位运算

位运算符概述

常见的位逻辑运算符:

运算符描述
&位与运算符,表示AND(表示所有条件都得匹配),运算规则为相同位都是1时结果才为1,不同则为0。举个例子:如"5 & 7",结果为5。
|位或运算符,表示OR(表示有一个条件匹配即可),运算规则为相同位只要一个为1则为1。举个例子:如"5
^位异或运算符,表示XOR,运算规则为相同位不同则为1,相同则为0。举个例子:如"5 ^ 7",结果为2
&^位清空运算符,表示AND NOT,运算规则为后数为0,则用前数对应位代替,后数为1则取0。举个例子:如"5 ^ 7",结果为0
<<左移,表示将对应的二进制数字向左移动相应的位数,比如 5 << 3,结果为40。计算过程为:我们用一个字节来表示一个数字,5转换成二进制为0000 0101,将二进制数字向左位移3位得到0010 1000,使用十进制表示为"40"
>>右移,表示将对应的二进制数字向右移动相应的位数,比如 5 >> 3,结果为1。计算过程为:我们用一个字节来表示一个数字,5转换成二进制为0000 0101,将二进制数字向左位移3位得到0000 0001,使用十进制表示为"1"

位运算的应用之一:判断奇偶性

// 对于任意整数x,x&1的结果为0表示x为偶数,结果为1表示x为奇数
	// 示例代码如下:
	if x&1 == 0 {
		fmt.Println("x is even")
	} else {
		fmt.Println("x is odd")
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

位运算的应用之二:交换两个数

// 对于任意整数x和y,可以通过位运算实现两个数的交换
	// 示例代码如下:
	x, y = y, x
  • 1
  • 2
  • 3

位运算的应用之三:判断一个数是否是2的幂次方

// 对于任意正整数x,x&(x-1)的结果为0表示x是2的幂次方,否则不是
	// 示例代码如下:
	if x&(x-1) == 0 {
		fmt.Println("x is a power of 2")
	} else {
		fmt.Println("x is not a power of 2")
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

实际应用:定义多个字段,按照位运算判断是否显示

package main

import "fmt"

const (
	title = 1      // 标题
	desc  = 1 << 1 // 描述
	image = 1 << 2 // 图片
	tag   = 1 << 3 // tag
)

func main() {
	// 定义显示的字段标识
	showFlag := 0

	// 需要显示 title
	showFlag = showFlag | title
	fmt.Println(showFlag) // 1

	// 需要显示 desc
	showFlag = showFlag | desc
	fmt.Println(showFlag) // 3

	// 需要显示 desc
	// showFlag = showFlag | image
	// fmt.Println(showFlag) // 7

	// 需要显示 tag
	showFlag = showFlag | tag
	fmt.Println(showFlag) // 11

	// 判断哪个需要显示:

	if showFlag|title == showFlag {
		fmt.Println("需要显示 title")
	}
	if showFlag|desc == showFlag {
		fmt.Println("需要显示 desc")
	}
	if showFlag|image == showFlag {
		fmt.Println("需要显示 image")
	}
	if showFlag|tag == showFlag {
		fmt.Println("需要显示 tag")
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/790229
推荐阅读
相关标签
  

闽ICP备14008679号