php位运算:与&、或|、异或^、取反~

<?php
/**
php中有4个位运算,分别是&与 |或 ^异或 ~取反
& 两位全为1,结果为1
| 有一位为1,结果为1
^ 一个为0,一个为1,结果为1
~ 取反0->1,1->0

1.二进制的最高位是符号位,0表示正数,1表示负数。
2.正数的原码,反码,补码都一样。
3.负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)。
4.负数的补码=它的反码+1。
5.0的反码,补码都是0.
6.php没有无符号数,换言之,php中的数都是有符号的。
7.在计算机运算的时候,都是以补码的方式来运算的。

**/

//异或
echo 13&7;

echo "<br/>";
echo 5|4 ;

echo "<br/>";
echo -3^3;

//推理过程:

/**

13&7

13的补码  00000000 00000000 00000000 00001101
7的补码   00000000 00000000 00000000 00000111
13&7      00000000 00000000 00000000 00000101   = 5

5|4

5的补码 00000000 00000000 00000000 00000101
4的补码 00000000 00000000 00000000 00000100
5|4      00000000 00000000 00000000 000000101   =5

-3^3

-3的补码
-3的原码 10000000 00000000 00000000 00000011
-3的反码 11111111 11111111 11111111 11111100
-3的补码 11111111 11111111 11111111 11111101
php位运算 与 或 异或 取反
复制代码
<?php
/**
php中有4个位运算,分别是&与 |或 ^异或 ~取反
& 两位全为1,结果为1
| 有一位为1,结果为1
^ 一个为0,一个为1,结果为1
~ 取反0->1,1->0

1.二进制的最高位是符号位,0表示正数,1表示负数。
2.正数的原码,反码,补码都一样。
3.负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)。
4.负数的补码=它的反码+1。
5.0的反码,补码都是0.
6.php没有无符号数,换言之,php中的数都是有符号的。
7.在计算机运算的时候,都是以补码的方式来运算的。

**/

//异或
echo 13&7;

echo "<br/>";
echo 5|4 ;

echo "<br/>";
echo -3^3;

//推理过程:

/**

13&7

13的补码  00000000 00000000 00000000 00001101
7的补码   00000000 00000000 00000000 00000111
13&7      00000000 00000000 00000000 00000101   = 5

5|4

5的补码 00000000 00000000 00000000 00000101
4的补码 00000000 00000000 00000000 00000100
5|4      00000000 00000000 00000000 000000101   =5

-3^3

-3的补码
-3的原码 10000000 00000000 00000000 00000011
-3的反码 11111111 11111111 11111111 11111100
-3的补码 11111111 11111111 11111111 11111101

3的补码 00000000 00000000 00000000 00000011

-3^3     11111111 11111111 11111111 11111110  《补码》
 推反码《对补码-1》
  11111111 11111111 11111111 11111101   《反码》
推原码《符号位不变 其他取反》
  10000000 00000000 00000000 00000010   《原码》  =-2

注意:因为二进制没有进位和退位,可以看做是10-1,那就等于1了

**/
?>
3的补码 00000000 00000000 00000000 00000011

-3^3     11111111 11111111 11111111 11111110  《补码》
 推反码《对补码-1》
  11111111 11111111 11111111 11111101   《反码》
推原码《符号位不变 其他取反》
  10000000 00000000 00000000 00000010   《原码》  =-2

注意:因为二进制没有进位和退位,可以看做是10-1,那就等于1了

**/
?>

 

我们就要知道三个概念了,原码,反码和补码。
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。取反操作指:1变0, 0变1。
补码:反码加1称为补码。也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
正数的补码与其原码相同;负数的补码是在其反码的末位加1

转载请注明出处:https://www.onexin.net/php-and-or-xor-negation/

相关文章:

1、用 PHP 编写更好的正则表达式regex
https://www.onexin.net/php-regex/

2、PHP 版本 8.2,8.1,8.0,7.4
https://www.onexin.net/php-8_2-8_1-8_0-7_4/

3、PHP中的Liskov替换原则
https://www.onexin.net/php-liskov/

4、php实现自运行的do实例详解
https://www.onexin.net/php-do/

5、PHP 后端实现JWT认证方法示例
https://www.onexin.net/php-jwt/

Leave a Reply