位运算符 &^ 能拆分其他位运算符表示吗?因为这个位运算符其他语言C还有rust都没有。

wandercn · · 994 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

&^ 这个运算符最早是没有的 测试代码: ``` package main import "fmt" const ( hasMonotonic = 1 << 63 nsecMask = 1<<30 - 1 nsecShift = 30 ) func main() { sec := 1632376722 nsec := 2324512 ynsec := uint64(nsec) ysec := uint64(sec) << nsecShift wall := hasMonotonic | uint64(sec)<<nsecShift | uint64(nsec) fmt.Printf("%b\n", ysec) fmt.Printf("%b\n", ynsec) D := int64(3600 * 10e9) oldnsec := wall & nsecMask fmt.Printf("%v\n", oldnsec) newNsec := int32(oldnsec) + int32(D%10e9) fmt.Printf("%v\n", newNsec) fmt.Printf("wall :%b\n", wall) fmt.Printf("nsecMask. :%b\n", nsecMask) fmt.Printf("wall_move :%b\n", wall>>30<<30) fmt.Printf("wall&^nsecMask:%b\n", wall&^nsecMask) wall1 := wall&^nsecMask | uint64(nsec) fmt.Printf("wall1:%b\n", wall1) wall2 := wall>>30<<30 | uint64(nsec) fmt.Printf("wall2:%b\n", wall2) fmt.Printf("equal:%v\n", wall1 == wall2) } ``` 以上代码我是变通处理,因为wall1 := wall&^nsecMask | uint64(nsec) 中 nsecMask 二进制是全1的,我直接用位移运算>>30<<30代替了。计算结果也是一样的。 但是如果不是 比如 1000000011000000000,就没法处理了。有人知道怎么拆分用& | ^其他语言也有的位运算符来达到 &^一样的结果?

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

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

994 次点击  
加入收藏 微博
3 回复  |  直到 2021-09-28 20:52:22
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传