如果将所有位设置为二进制补码整数,则得到-1.
让我用一个(非常小的)使用二进制补码的两位有符号整数来说明:
00 ? 0
01 ? 1
10 ? ?2
11 ? ?1
Run Code Online (Sandbox Code Playgroud)
这只是从0开始计数,经过溢出从1到-2并以-1结束.如您所见,如果清除所有位,则得到0,如果全部设置,则得到-1(无论整数有多宽).
(请注意,使用BASIC的人已经知道这一点,因为没有布尔运算符,并且对于按位运算符,事情也同样有效,除了True是-1而不是1.)
该零实际上由32个零位表示,因为PHP整数类型是32位有符号整数,而不是单个位:
0000 0000 0000 0000 0000 0000 0000 0000
Run Code Online (Sandbox Code Playgroud)
所以按位NOT翻转所有这些,导致两个补码为-1(最左边的一个代表符号):
1111 1111 1111 1111 1111 1111 1111 1111
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |