我一直在努力了解有关PHP的按位运算符的更多信息,而且我对〜运算符有点麻烦。在线教程之后,我看到它反转了一个数字中的设置位。例如,如果你有一个等于7的字节:
|------------------------------------|
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|------------------------------------|
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
|------------------------------------|
使用~7反转它:
|------------------------------------|
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|------------------------------------|
| 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
|------------------------------------|
这不等于248而不是-8吗?
答案 0 :(得分:1)
没有。原因是Two's complement。
每个数字的第一位都有一个负值(PHP中为-2 32 ,因为PHP使用32位(= 4字节)数字)。当该位设置为1时,整数将变为负数。因此,当使用not-operator(~
)时,该位将改变,数字将变为负数。
答案 1 :(得分:0)
2'补码,最左边的位表示符号,0表示正数,1表示负数。通过反转位并加1来计算二进制补码。 在这种情况下,它是1111000(符号位除外),然后减1(1110111)并反转它(0001000,负),所以它是-8。 在C中,带符号的整数范围是-2 ^ 15-1到2 ^ 15。