php中的取反符号,php中取反的全过程

本文详细解析了PHP中位运算取反的过程,包括正数和负数的原码、反码、补码概念,以及如何通过补码进行取反运算,并给出了具体的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在php当中,有关于位运算取反是一个很难理解的东西,主要在它要转来转去,如果是用程序还无所谓,直接就是:

(?php

//想求什么数自己填上去,以5的为例

$a=~5;

echo "$a"."

";

?)

(由于php前面加<>文章无法发表,所以只能用())

运行,这样就可以得出结果,但是如果是笔试就有点问题,需一步步的推导,如果笔试不要过程还好,要过程就是一个头大的问题。

不要过程

0取反结果为0

-1取反结果为0

-2取反结果为1

-3取反结果为2

-4取反结果为3

-5取反结果为4

-6取反结果为5

-7取反结果为6

反过来也是一样。

..................

其余的数不用我说,其实大家也明白了,但是有些人就要过程,我个人觉得这是没有必要的,但是就是有人要,怎么办呢?这里就需要大家理解原码,反码,补码的概念。

正数和0不用说,原码=反码=补码。

这里最重要的是负数,原码=(各位取反)反码=(各位取反+1或者反码+1)补码

如-5,(-等于1,+等0,一共32位,符号在第一位)。

-5原码:10000000 00000000 00000000 00000101

-5反码:11111111 11111111 11111111 11111010(符号位不变,其它位取反)

-5补码:11111111 11111111 11111111 11111011(在反码上+1)

以上知识是很简单的,但是接下来就有点难了,怎样取反呢?

对-5的补码取反,再对取反结果转成原码,再化成十进制,是不是很麻烦。没办法,在计算机中,只有补码才能运算,只有十进制大家才认识,如果这个世界上人人都是认补码,那么就没有这么麻烦了,如果你买米,问老板,这个米是不是00000000

00000000 00000000 00000101元一斤(5元一斤),如果老板能听明白,那么就不成问题了。

显然老板听不懂,所以只能转换才行。接下来就介绍如何转换,还是以-5为例

-5的补码:11111111 11111111 11111111 11111011

取反结果:00000000 00000000 00000000 00000100这里是补码

接下来是+1还是-1呢?在这里,很多人都是犯错误的,我一直做错,以为不是加就是减,但是我忘记了,正数的原码=反码=补码这一原则,我还在减1,还在求反,这是错误的,所以这里的补码结果就是最终结果:00000000

00000000 00000000 00000100,化为十进制就是4。

那对于正数有必要说明一下:

还是以5为例子:

5原码:00000000 00000000 00000000 00000101

5反码:00000000 00000000 00000000 00000101

5补码:00000000 00000000 00000000 00000101

取反结果:11111111 11111111 11111111 11111010这里是补码

接下来是+1还是-1呢?有两种处理方法,一种是先-1,再取反,另一种是先取反,再+1

第一种先-1,再取反

先-1:11111111 11111111 11111111 11111001

再取反:10000000 00000000 00000000 00000110

结果4+2=6,因为符号为负,所以最终结果是:-6

第二种先取反,再+1

先取反:10000000 00000000 00000000 00000101

再+1:10000000 00000000 00000000 00000110

结果一样:-6

以上就是php中取反的全过程,不过我个人觉得没有必要知道这些,这仅仅只是为了找工作时面试,因为经验告诉我们,只要你记住结果比什么都好。过程交结电脑去完成吧,我们只需要记得是怎么回事就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值