位运算
1)理论上的进制转换
十进制转二进制:12->1100
二进制转十进制:1100-> 1*2^3+1*2^2+0*2^1+0*2^0=12
2)原码(数值的原码)
原码是数值的真值的绝对值的最高位表示符号位
正数用 0
负数用 1
当前PHP运行的环境里一个整数占多少位?(有的占32位有的占64位)
var_dump(PHP_INT_SIZE)能确定当前运行环境一个整数占几个字节,一个字节是8个位
一个整数占4*8=32位
00000000000000000000000000000001100 [12的原码]
10000000000000000000000000000001100 [-12的原码]
3)反码
正数的反码就是其值本身(和其原码相同)
负数的反码:符号位不变,其他位取反
00000000000000000000000000000001100 [12的反码]
10000000000000000000000000000001100 [-12的原码]
1111111111111111111111111111111111110011 [-12的反码]
4)补码
正数的补码就是其本身(和其原码相同)
负数的补码:其值的反码加1
00000000000000000000000000000001100 [12的补码]
1111111111111111111111111111111111110100 [-12的补码]
注:
计算机中数值一律采用“补码”的形式表示、处理、存储、运算,减少计算机硬件电路的复复杂性
var_dump(decbin(-12)) 函数可以进行二进制和10进制之间的互相转换,用于证明我们刚刚的结论