按位〜运算符

时间:2012-10-28 21:15:00

标签: php bitwise-operators

我一直在努力了解有关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吗?

2 个答案:

答案 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。