php取反运算值 {echo ~2;}你知道结果是什么吗?

echo ~2; 

  请问结果值是多少呢?

答案是  -3

 

为什么?

首先计算机用补码来存储的,正数的原码、反码、补码都是一样的,

例如:

3的原码、反码、补码都是

                 00000000 00000000 00000000 00000011

-3的原码   10000000 00000000 00000000 00000011  (第一个是符号位,1表示负数)

-3的反码   11111111  111111111  11111111  11111100  (符号位第一个不变,其他位置取反)

 

-3的补码   11111111  111111111  11111111  11111101

 

再来看看之前的问题:

// 2的补码   00000000 000000000 00000000 00000010
// ~运算后   11111111 111111111 11111111 11111101  (其实就-3的补码)
echo ~2; // 输出 -3

// 4的补码   00000000 000000000 00000000 00000100
// ~运算后   11111111 111111111 11111111 11111011  (其实就-5的补码)
//          11111111 111111111 11111111 1111010   (反码)
//          10000000 00000000  00000000 0000101   (原码)
echo ~4;//输出 -5

  

 

posted @ 2017-09-09 14:23  mvvp  阅读(669)  评论(0编辑  收藏  举报