Php 按位7 | ~5=-1;认真地

Php 按位7 | ~5=-1;认真地,php,bit-manipulation,Php,Bit Manipulation,今天我又在试着找出位运算符,有些事情对我来说还是有点模糊。在我开始尝试将|运算符与~,例如:number | ~number组合之前,一切都是有意义的。另一方面,我已经阅读了维基百科关于两者互补的文章,并且理解了这一方面(我想) 使用像7&~5这样的&运算符会产生预期的结果2,因为两行中只设置了2列。让我来到这里的是7 | ~5正在输出-1。我希望是255,因为每一列中都有一个1;或者是5,因为最下面一行的计数可能是0而不是1。但这两个都不是,都是-1 我一直在谷歌上搜索这篇文章,直到我的大脑受

今天我又在试着找出位运算符,有些事情对我来说还是有点模糊。在我开始尝试将|运算符与~,例如:
number | ~number
组合之前,一切都是有意义的。另一方面,我已经阅读了维基百科关于两者互补的文章,并且理解了这一方面(我想)

使用像
7&~5
这样的&运算符会产生预期的结果2,因为两行中只设置了2列。让我来到这里的是
7 | ~5
正在输出-1。我希望是255,因为每一列中都有一个1;或者是5,因为最下面一行的计数可能是0而不是1。但这两个都不是,都是-1


我一直在谷歌上搜索这篇文章,直到我的大脑受伤为止,但我在任何地方都找不到一篇能解决这一问题的文章。有人知道这里发生了什么吗

7 | ~5的结果是所有模式的位模式。这是二的补码中的-1。

但是如果你可以点击一个无符号数据类型,那么你可能会得到你想要的答案。@Richard-True,除了不方便的事实之外。当然!我早该看到的!多谢各位。很长一段时间以来,这让我发疯。@ScottyC.,关键是当设置了最高位时,数字被解释为负数。
------------------------------------------
| 128 | 64 | 32 | 16 |  8 |  4 |  2 |  1 |
------------------------------------------
|   0 |  0 |  0 |  0 |  0 |  1 |  1 |  1 | = 7
------------------------------------------
|   1 |  1 |  1 |  1 |  1 |  0 |  1 |  0 | = ~5 or -6
------------------------------------------