首页 > 编程知识 正文

逻辑运算符运算规则,按位取反运算符怎么用

时间:2023-05-04 07:28:44 阅读:39465 作者:865

请先看代码。 $a=8;

$b=~$a; //逐位反转

echo '$a='.$a.'

';

echo '$b='.$b;

输出结果: $a=8

$b=-9

结果和预想的不一样呢。 因为在PHP的中文手册中,$anot (按位)说,$a中的0位为1,反之亦然。 我只是理解0等于1,1等于0。 原本以位为单位反过来以十进制输出,并不是这样被理解的。

首先,要知道在计算机中,负数表示为其正值的补数。

现在,您需要知道三个概念:原码、反码和完成码。

原码:以绝对值大小转换的二进制数,是一个称为原码的整数。

反码:按位反取二进制数,得到的新二进制数称为原二进制反码。 反向操作是指1等于0,0等于1。

补数:反符号加1称为补数。 也就是说,要得到一个数的补数,首先要得到解码,然后在解码上加1,得到的数称为补数。

正数补数与其原码相同; 负数的补数是其反码的最后一位加1

综上所述,每8位反转并以10进制输出的过程:

1、8的源代码为: 000000000000000000000000000000000000000000000000

2、逐位反转: 111111111111111111111111111111111111111111111111111111111110111; 因为最前面的位数是1,所以是负的。 也就是说,每个比特反过来得到的是负数

下一个以十进制输出。 负数表示为该正值的补数。

3、两步得到的数(其正相反,符号不变还是最高位为1 )取反: 1000000000000000000001000

4、反码加1:100000000000000000000000000000000000000000001; 这样就变成负数正值的补数形式。 也就是-9。

让我再举一个例子。 每2位反转时。

00000000000000000000000000000000000000000000010 (源代码) ) ) ) ) ) ) )。

1111111111111111111111111111111111111111111101 (按比特反转) ) ) ) ) )。

100000000000000000000000000000000000000000010 (符号不会因正值的反符号而变化) ) ) ) ) ) )。

10000000000000000000000000000000000000000011 (加1,结果-3) ) ) ) ) ) )。

代码和结果如下。 php

$a=2;

$b=~$a; //逐位反转

echo '$a='.$a.'

';

echo '$b='.$b;

结果: $a=2

$b=-3

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。