![go.png](https://static.studygolang.com/171230/450e26c3aaf17301a15d2dc7394a409c.png)
fmt.Println(^3) 输出-4 ^number 这个运算符是怎么计算的?
<a href="/user/leavesdrift" title="@leavesdrift">@leavesdrift</a> 好的 这个懂了 那我想问下 这个有什么作用?一般在哪些情况下会用到
#2
更多评论
^在 go 中可以做单目运算符表示取反,也可以做双目运算符表示异或,异或很简单。至于取反,例如一个常量3不特殊声明应该是int类型。
```go
fmt.Printf("%T", 3)
```
那么视机器而定,64位机器就是int64, 32位机器就是int32。例如64位机器上:
3 的二进制表示为:
```
0000....011
```
^3的二进制表示为:
```
1111....100
```
-4的二进制表示需要两步求得补码:
```
原来(只看4):
0000....100
取反:
1111....011
加一:
1111....100
```
结果就是 `^3 == -4`
#1
这些要慢慢探索,有很多好得位运算优化程序得方法,对^得应用例如我知道一个
位运算求负数的绝对值?
```
(^n)+1
```
它利用的性质是补码的补码等于原码,如果你知道其它好玩的也可以告诉我,我也在不断了解一些通过位运算优化程序的方法
#3