按位与操作

& 是 Golang 中的位运算符,主要用于按位与操作。以下是一些 & 运算符的使用场景:

在编程中,& 运算符可以用于位操作。例如,可以使用 & 运算符来将一个整数的某些位设置为 0 或 1,或者获取某些位的值。

在网络编程中,& 运算符可以用于设置和查询 IP 地址和端口号。例如,可以使用 & 运算符来获取本地 IP 地址或设置 socket 的地址。

在嵌入式系统中,& 运算符可以用于与硬件设备交互。例如,可以使用 & 运算符来控制电子设备的某些位,或者读取传感器的数据。

在多线程编程中,& 运算符可以用于同步线程之间的数据访问。例如,可以使用 & 运算符来创建线程安全的数据结构或者进行线程间的互斥访问。

在算法和数据结构中,& 运算符可以用于位运算的算法和数据结构,例如位图和哈希表等

package main

import "fmt"

func main() {

    // 将整数的某些位设置为 0:
    // 示例:
    var x uint = 0b11010110
    fmt.Printf("%08b\n", clearBit(x, 2))     // 输出 11010010
    fmt.Printf("%08b\n", clearBits(x, 3, 6)) // 输出 11000110

    // 将整数的某些位设置为 1:
    // 示例:
    var x1 uint = 0b11010110
    fmt.Printf("%08b\n", setBit(x1, 1))     // 输出 11010110
    fmt.Printf("%08b\n", setBits(x1, 3, 6)) // 输出 11111110
}

// 将 x 的第 n 位设置为 1
func setBit(x, n uint) uint {
    return x | (1 << n)
}

// 将 x 的所有位从 m 到 n 设置为 1
func setBits(x, m, n uint) uint {
    mask := (1 << n) - (1 << m) + 1
    return x | uint(mask)
}

// 将 x 的第 n 位设置为 0
func clearBit(x, n uint) uint {
    return x &^ (1 << n)
}

// 将 x 的所有位从 m 到 n 设置为 0
func clearBits(x, m, n uint) uint {
    mask := (1 << n) - (1 << m) + 1
    return x &^ uint(mask)
}

//使用 & 运算符的场景

// 掩码操作:& 运算符经常用于进行掩码操作,例如从一个值中提取特定的位。可以使用一个掩码变量和 & 运算符来提取或修改指定的位。
func A2() {
    // 从一个 32 位无符号整数中提取低 8 位
    var value uint32 = 0x12345678
    var mask uint32 = 0xff
    var result = value & mask // 等于 0x78
    fmt.Println("result:", result)
}

// 判断一个数是否为 2 的幂次方
func isPowerOfTwo2(num int) bool {
    return num > 0 && (num&(num-1)) == 0
}

// 位运算:& 运算符可以用于各种位运算操作,例如清除某个位、提取某些位、判断某个位是否为 1 等。
// 清除一个 32 位无符号整数的低 8 位
var value uint32 = 0x12345678
var mask uint32 = ^uint32(0xff)
var result = value & mask // 等于 0x12345600
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值