go学习记录2025-03-21


按位取反

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
^0,按位取反,根据数据类型返回值不同
int:返回-1
uint根据位数不同结果不同,unit默认64位
ui := ^uint8(0) 结果为255,8位00000000,取反结果11111111,相当于2^8-1
ui := ^uint16(0) = 65535 = 2^16-1

int类型,负数使用正数的按位取反后+1,再按位取反
简单的算法 ^int(x) = -(x+1)
^int8(-16)
获取16的正数 00010000
按位取反+1 11110000
按位取反 00001111 = 15

正数使用按位取反,获取负数,负数的计算需要按位取反+1
^int8(16)
获取二进制 00010000
按位取反 11101111 //1开头代表负数 计算方式 按位取反+1
按位取反+1 00010001 = -17

获取uint最大值
^uint(0)