Php 逐位算子

Php 逐位算子,php,bitwise-operators,Php,Bitwise Operators,今天我一直在努力学习PHP的逐位运算符,但我在使用~运算符时遇到了一些问题。在在线教程之后,我看到它在一个数字中反转设置位。例如,如果您有一个等于7的字节: |------------------------------------| | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | |------------------------------------| | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |

今天我一直在努力学习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吗?

不。原因是


每个数字的第一位都有一个负值(-232在PHP中,因为PHP使用32位(=4字节)的数字)。当位设置为1时,整数将变为负数。因此,当使用not运算符(
~
)时,该位将改变,数字将变为负数。

否。原因是


每个数字的第一位都有一个负值(-232在PHP中,因为PHP使用32位(=4字节)的数字)。当位设置为1时,整数将变为负数。因此,当使用not运算符(
~
)时,该位将改变,数字将变为负数。

最左边的位表示符号,0表示正数,1表示负数。两个“补码”是通过将位反转并加1来计算的。 在本例中,它是1111000(符号位除外),然后减去1(1110111)并反转它(0001000,负数),因此它是-8。
在C语言中,带符号整数的范围是从-2^15-1到2^15。

最左边的一位表示符号的是两个补码,0表示正,1表示负。两个“补码”是通过将位反转并加1来计算的。 在本例中,它是1111000(符号位除外),然后减去1(1110111)并反转它(0001000,负数),因此它是-8。 在C语言中,带符号整数的范围是从-2^15-1到2^15