你能解释一下(~不是按位)做什么吗?

Can you explain what (~ not bit-wise) do?

function test($n){
return (~ $n ** 1 / 2)**2;
}

如果$n = 5 输出将是 9。为什么?

按位非运算符 ~ 简单地翻转给定数字中的每一位,零变为一,一变为零。在本例中,$n 为 5,在二进制中为 101。但是,您肯定知道,计算机中的数字具有固定的位大小;大多数时候它是 32 位的,但对于这种情况,我们假设我们有 8 位数字。那么 5 实际上就是 0000 0101。现在,如果您在此数字上应用 ~ 运算符,您将得到 1111 0101。这个数字实际上是十进制的 245。但是,很可能您使用的是有符号整数,这意味着根据 two's complement convention,第一位设置为 1 的数字实际上是负数。一般规则非常简单:给定一个数字 n,应用按位非运算得到 -n - 1(与位大小无关) .这意味着在这种情况下我们会得到 -6。因此,考虑到运算符的优先级,最终结果将是:

((((~5) ** 1) / 2) ** 2) = ((((-6) ** 1) / 2) ** 2) = ((-3) ** 2) = 9