请问 ^ 2 一个数字是怎么计算的?

lcjcians · 2017-12-30 00:20:28 · 1627 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-12-30 00:20:28 的主题,其中的信息可能已经有所发展或是发生改变。

go.png

fmt.Println(^3) 输出-4 ^number 这个运算符是怎么计算的?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1627 次点击  ∙  1 赞  
加入收藏 微博
4 回复  |  直到 2017-12-30 21:42:52
leavesdrift
leavesdrift · #1 · 7年之前

^在 go 中可以做单目运算符表示取反,也可以做双目运算符表示异或,异或很简单。至于取反,例如一个常量3不特殊声明应该是int类型。

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

lcjcians
lcjcians · #2 · 7年之前

@leavesdrift 好的 这个懂了 那我想问下 这个有什么作用?一般在哪些情况下会用到

leavesdrift
leavesdrift · #3 · 7年之前
lcjcianslcjcians #2 回复

@leavesdrift 好的 这个懂了 那我想问下 这个有什么作用?一般在哪些情况下会用到

这些要慢慢探索,有很多好得位运算优化程序得方法,对^得应用例如我知道一个
位运算求负数的绝对值?

(^n)+1

它利用的性质是补码的补码等于原码,如果你知道其它好玩的也可以告诉我,我也在不断了解一些通过位运算优化程序的方法

lcjcians
lcjcians · #4 · 7年之前

@leavesdrift 好的 知道了 谢谢

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传