〜位运算符(波浪号)的功能是啥[重复]

Posted

技术标签:

【中文标题】〜位运算符(波浪号)的功能是啥[重复]【英文标题】:What's the function of the ~ bitwise operator (Tilde) [duplicate]〜位运算符(波浪号)的功能是什么[重复] 【发布时间】:2012-02-26 03:15:02 【问题描述】:

可能重复:What does this ~ operator mean here?Bit not operation in php(or any other language probably)

谁能解释一下 PHP 中的 ~ 运算符?我知道是NOT-operator,但是PHP为什么要把下面的语句转换成变量的负值减一呢?

$a = 1; echo ~$a    // echo -2
$a = 2; echo ~$a    // echo -3
$a = 3; echo ~$a    // echo -4  

【问题讨论】:

有关这方面的信息可在整个互联网上获得 在副本中,没有任何与二进制补码运算相关的内容,这就是这个问题的本质。我怀疑它是 exact 重复的。但是,这个this question 涵盖了完全相同的问题。 【参考方案1】:

这称为补码算法。你可以阅读它in more detail here。

运算符~ 是一个二元否定运算符(与布尔否定相反),因此,它反转其操作数的所有位。结果是二进制补码算术中的负数。

【讨论】:

【参考方案2】:

按位非。

它将所有 1 转换为 0,将所有 0 转换为 1。所以 1 变为 -2(二进制表示为 0b111111111110)。

查看文档 http://php.net/manual/en/language.operators.bitwise.php

【讨论】:

-2 确实。刚刚检查过。 确实如此。它是按位非,但有符号数字表示使 显示为 ie,。 -2。但是如果你看二进制级别,你会发现它完全是一个否定。【参考方案3】:

~ 翻转数字的所有位。在二进制补码(google it)中,数学否定是通过翻转所有位然后加 1 来实现的。如果你只做第一步(即:只是翻转位),你有加法逆减 1。

【讨论】:

以上是关于〜位运算符(波浪号)的功能是啥[重复]的主要内容,如果未能解决你的问题,请参考以下文章

波浪线(波浪线)(即“~”运算符在 Python 中的作用是啥? [复制]

~~(“双波浪号”)在 Javascript 中的作用是啥?

CSS中的符号波浪号(〜)是啥意思[重复]

c++程序中->second 是啥意思

正则表达式中的波浪号运算符

C中的波浪号运算符