go ^ 单目运算符

按位取反

代码

fmt.Println(^1)
-2

取一个负数的绝对值,就是按位取反再加1

举例, 将-2的每一位分别打印出来:

var x int32 = -2
for i := 0; i < 32; i++ {
	//先打印低位,右移一位,在打印倒数第二位,直到打印完毕
	fmt.Println(x & 1)
	x = x >> 1
}

进制表示

package main

import (
	"fmt"
)

func main() {
	var x int32 = 0
	//构造 -2 的 2 进制表示
	for i := 32; i >= 1; i-- {
		x += 1 << uint32(i)
	}

	fmt.Printf("二进制x: %b\n", x)

	fmt.Printf("十进制x: %d\n", x)

	fmt.Printf("uint32(x): %b\n", uint32(x))

	fmt.Printf("int32(x): %b\n", int32(x))

	var y int = -2
	for i := 0; i < 32; i++ {
		fmt.Print(y & 1)
		y = y >> 1
	}
}