PHP 비트 연산에서 비트 부정은 무엇을 의미합니까?

怪我咯
풀어 주다: 2023-03-10 21:36:01
원래의
6511명이 탐색했습니다.

先看代码:

$a=8;
$b=~$a; //按位取反
echo "\$a=".$a."<br>";
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."<br>";
echo "\$b=".$b;
?>
로그인 후 복사

结果:

$a=2
$b=-3
로그인 후 복사

위 내용은 PHP 비트 연산에서 비트 부정은 무엇을 의미합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿