标签:溢出 echo 无符号 php pre 计算机 family 反码 学习
一、二进制
例:
-1 的源码 10000000 00000000 00000000 00000001
-1 的反码 11111111 11111111 11111111 11111110
-1 的补码 11111111 11111111 11111111 11111111
二、位运算
例&:
2&3=?
2的补码 00000000 00000000 00000000 00000010
3的补码 00000000 00000000 00000000 00000011
2&3的补码 00000000 00000000 00000000 00000010(补码)
例|:
2的补码 00000000 00000000 00000000 00000010
3的补码 00000000 00000000 00000000 00000011
2|3 00000000 00000000 00000000 00000011
例^:
2的补码 00000000 00000000 00000000 00000010
3的补码 00000000 00000000 00000000 00000011
2^3 00000000 00000000 00000000 00000001
例~:
~2=?
步骤:
1.首先求出2的补码,2是整数,所以 原码=反码=补码
00000000 00000000 00000000 00000010
2.取反后,为 ?的补码
11111111 11111111 11111111 11111101
3.?的补码-1,为 ?的反码
11111111 11111111 11111111 11111100
4.?的反码取反,为 ?的值
10000000 00000000 00000000 00000011 => -3
例>>:
1>>2=?
1的补码 00000000 00000000 00000000 00000001
右移2位 00(<补位)00000000 00000000 00000000 000000(截断)01
例>>:
-1>>2=?
-1的原码 10000000 00000000 00000000 00000001
-1的反码 11111111 11111111 11111111 11111110
-1的补码 11111111 11111111 11111111 11111111
右移2位 11111111 11111111 11111111 11111111(补码)
补码-1 11111111 11111111 11111111 11111110(反码)
取反码 10000000 00000000 00000000 00000001
例<<:
1<<2=?
1的补码 00000000 00000000 00000000 00000001
左移2位 00(截断)000000 00000000 00000000 00000001(补位>)00
例<<:
-1<<2=?
-1的原码 10000000 00000000 00000000 00000001
-1的反码 11111111 11111111 11111111 11111110
-1的补码 11111111 11111111 11111111 11111111
左移2位 11111111 11111111 11111111 11111100(补码)
补码-1 11111111 11111111 11111111 11111011(反码)
取反码 10000000 00000000 00000000 00000100
echo 6&3;//2 echo "<br>"; echo 6|3;//7 echo "<br>"; echo 6^3;//5 echo "<br>"; echo ~6;//-7 echo "<br>"; echo 6>>3;//0 echo "<br>"; echo 6<<3;//48 echo "<br>"; echo -6&3;//2 echo "<br>"; echo -6|3;//-5 echo "<br>"; echo -6^3;//-7 echo "<br>"; echo ~-6;//5 echo "<br>"; echo -6>>3;//-1 echo "<br>"; echo -6<<3;//48
标签:溢出 echo 无符号 php pre 计算机 family 反码 学习
原文地址:http://www.cnblogs.com/luyucheng/p/5988100.html