go - 为什么 -2 和 -1 在 Go 中等于 -2?
问题描述
为什么 -2&-1 会导致 -2?我假设 0010 和 0001 会导致 0000。确实,当数字为正时它确实如此。
fmt.Printf("%b, %b, %v\n", -2, -1, -2&-1)
// shows: -10, -1, -2
解决方案
这实际上是一个关于数字在计算机中如何表示的问题,而不是围棋。您将从 C 或 Python 等其他语言/环境中获得相同的结果。
为简单起见,我们假设 8 位。-2 是11111110
二进制的(使用二进制补码,这是现代机器中表示负整数的标准方法)。-1 是11111111
二进制的。其中AND
是11111110
,即 -2。
实际上,Go 整数可能是 32 位或 64 位,但这并不会改变答案。只需在上述表示的左侧添加一堆 1。结果仍然1111....1110
是-2。
推荐阅读
- jquery - ActionController::UnknownFormat (Ruby on Rails)
- excel - TextBox SetFocus 不适用于 VBA 表单 Excel
- swift - 使用 Swift 更新 Excel 电子表格数据
- php - 如何在 Ajax jQuery 中添加确认消息
- eureka-forms - 使用按钮刷新/重新加载 Eureka PushRow 推送的 ViewController 选项?
- arduino - 应用 FFT 后计算信号的幅度
- nativescript - NativeScript CLI 安装错误
- node.js - 来自 Nodejs 服务器的基本身份验证请求
- python - Pytorch 在 __init__() 中定义层和在 forward() 中直接使用有什么区别?
- wordpress - WordPress 网站上的建议或请求表单,如何自动知道来自哪个用户?