按位取反如何运算 php,php 位运算中的按位取反到底什么意思?

本文详细解释了PHP中的按位取反运算符(~),通过实例展示了其工作原理。按位取反会改变二进制表示中的每一位,导致负数的出现。文章介绍了原码、反码和补码的概念,并通过8和2的例子,说明了按位取反后如何以十进制输出负数的过程。
摘要由CSDN通过智能技术生成

先看代码:$a=8;

$b=~$a; //按位取反

echo "\$a=".$a."
";

echo "\$b=".$b;

输出结果:$a=8

$b=-9

结果跟我所想的不一样啊,因为在PHP中文手册中说: ~ $a Not(按位非) 将 $a 中为 0 的位设为 1,反之亦然。 我只是简单的理解为:0变1,1变0。原来按位取反以十进制输出并不是简单理解成这样。

首先要知道,在计算机中,负数以其正值的补码形式表达。

这样我们就要知道三个概念了,原码,反码和补码。

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

反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。取反操作指:1变0, 0变1。

补码:反码加1称为补码。也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。

正数的补码与其原码相同;负数的补码是在其反码的末位加1

由上所知,8按位取反以十进制输出的过程:

1、8的原码为:0000 0000 0000 0000 0000 0000 0000 1000

2、按位取反:1111 1111 1111 1111 1111 1111 1111 0111;由于最前面一位为1,所以为负数。即即按位取反后得的为负数

下面以十进制输出:负数以其正值的补码形式表达:

3、2步所得的数(是其正为取反,符号不变,最高位还是为1)取反:1000 0000 0000 0000 0000 0000 000 1000

4、反码加1:1000 0000 0000 0000 0000 0000 000 1001;这样就得负数的正值的补码形式。也就是-9了。

再举一例子啊。如2按位取反。

0000 0000 0000 0000 0000 0000 0000 0010(原码)

1111 1111 1111 1111 1111 1111 1111 1101(按位取反)

1000 0000 0000 0000 0000 0000 000 0010 (正值的反码,符号不变)

1000 0000 0000 0000 0000 0000 000 0011 (加1,结果为-3)

代码和结果如下:<?php

$a=2;

$b=~$a; //按位取反

echo "\$a=".$a."
";

echo "\$b=".$b;

?>

结果:$a=2

$b=-3

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值