Golang中b := a << 1是什么意思?

Golang中b := a << 1是什么意思?

a := 42
	fmt.Printf("%d\t%b\t%#x\n", a, a, a)
	b := a << 1
	fmt.Printf("%d\t%b\t%#x\n", b, b, b)

2 回复

这意味着左移相当于乘以2,而右移则相当于除以2……! 假设 4 >> 1 的结果是 2,而 4 << 1 的结果是 8。左移一位等同于乘以2,右移一位等同于除以2,在你的例子中,假设是8位 00101010 << 1 从左边移除,并从右边插入,结果 = 01010100

更多关于Golang中b := a << 1是什么意思?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这是一个位左移操作。a << 1 将变量 a 的所有二进制位向左移动1位,相当于乘以2。

示例代码:

package main

import "fmt"

func main() {
    a := 42          // 十进制42 = 二进制101010
    fmt.Printf("原始值: %d\t二进制: %b\t十六进制: %#x\n", a, a, a)
    
    b := a << 1      // 左移1位:101010 -> 1010100
    fmt.Printf("左移后: %d\t二进制: %b\t十六进制: %#x\n", b, b, b)
    
    // 验证相当于乘以2
    c := a * 2
    fmt.Printf("乘以2:  %d\t二进制: %b\t十六进制: %#x\n", c, c, c)
    
    // 更多示例
    x := 1
    fmt.Printf("\n1左移不同位数的效果:\n")
    for i := 0; i <= 5; i++ {
        result := x << i
        fmt.Printf("1 << %d = %d (二进制: %b)\n", i, result, result)
    }
}

输出:

原始值: 42    二进制: 101010       十六进制: 0x2a
左移后: 84    二进制: 1010100      十六进制: 0x54
乘以2:  84    二进制: 1010100      十六进制: 0x54

1左移不同位数的效果:
1 << 0 = 1 (二进制: 1)
1 << 1 = 2 (二进制: 10)
1 << 2 = 4 (二进制: 100)
1 << 3 = 8 (二进制: 1000)
1 << 4 = 16 (二进制: 10000)
1 << 5 = 32 (二进制: 100000)

关键点:

  1. << 是Go语言的左移位运算符
  2. a << na 的二进制表示向左移动 n
  3. 每左移1位相当于乘以2(对于无溢出情况)
  4. 右补0,左侧超出的位被丢弃
  5. 适用于所有整数类型(int, uint, int8, uint8等)
回到顶部