UInt62.max/2在内存中由0100..0000表示.添加1,它将是0100..0001.所以,标志的第一位.我们拿-1.但CPU认为它是-9 223 372 036 854 775 808.为什么它如此复杂?
你可以看到它是真的,因为Swift游乐场中的问题:为什么在Swift中UInt64 max等于-1?
var max = UInt64.max / 2 + 1 // playground shows -1 because it treats it as Int64
Run Code Online (Sandbox Code Playgroud)
是的,实际上-1并没有1用符号位表示,而是将所有位设置为1.这被称为"二进制补码"表示,并且在大多数现代处理器中使用.
在这里阅读更多相关信息:
https://en.wikipedia.org/wiki/Two%27s_complement
其中一个原因是,这种涉及负数和正数的算术运算更容易.如果-1被描绘成1一个符号位,我们试图添加1到它在一个简单的方式,我们会得到2一个符号位而不是零.使用二进制补码表示,您只需添加数字就好像它们是无符号的一样,并获得正确的结果.
| 归档时间: |
|
| 查看次数: |
140 次 |
| 最近记录: |