宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

比如十进制的32 = 2*10的0次方 加上 3*10的一次方

以此类推

二进制:逢二进一

二进制(0,1)
二进制的最高位为符号位 0表负数 1为负数
正数的原码 反码 补码 都是一样的
负数的反码=它的原码符号位不变,其他位取反 0变1 1变零
负数的补码=反码加1
0的反码 补码都是0
PHP没有无符号数
计算机运算的时候都是以补码的方式运算的

举例:
-1的原码为
10000000 00000000 00000000 00000001
反码为
11111111 11111111 11111111 11111110
补码为
11111111 11111111 11111111 11111111

一个二进制字符 占用四个字节 一个字节等于8个bit
那么1的二进制表示为
00000000 00000000 00000000 00000001

PHP 位运算符号
& 按位与 两位全为1 结果为1
| 按位或 两位有一个为1 结果就为1
^ 按位异或 一个为0 一个为1 结果为1
~ 俺位取反 0->1 1->0

d emo
~2 = ?
步骤:
先找出2的补码(正数的反码 原码 补码都是同一个)
00000000 00000000 00000000 00000010
再按位取反
11111111 11111111 11111111 111111101(补码-> 原码)
11111111 11111111 11111111 111111100 反码
10000000 00000000 00000000 000000011 原码
1+1*2的零次方 + 1* 2的一次方 = -3

2&3 =?
2的补码
00000000 00000000 00000000 000000010
3的补码
00000000 00000000 00000000 000000011
所以得
到补码为

00000000 00000000 00000000 000000010
正数的补码 反码 都是一样
所以
答案是2

其他的类推

PHP 移位运算符
<< 算数坐移
>>

对二进制数进行移动
运算规则:
算术右移:低位溢出,符号位不变,并且符号位补溢出的高位

算术左移:符号位不变,低位补零

demo:
$a = 1>>2
1的补码
00000000 00000000 00000000 00000001
01 溢出 在高位补符号位 00(符号位不变)
答案是0

$a = -1<<2
10000000 00000000 00000000 00000001 原码
11111111 11111111 11111111 11111110 反码
11111111 11111111 11111111 11111111 补码

11111111 11111111 11111111 11111100

11111111 11111111 11111111 11111011

10000000 00000000 00000000 00000100

-4

积累知识,分享知识,学习知识。