哎呀几年过去,都快把大学学的计算机导论的知识给忘完了,现在来回顾一下按位去反的流程:
<?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 ~8;//-9 那么这个-9是怎么得来的呢? 8的原码、反码、补码都是 : 00000000 00000000 00000000 00001000 取反(即~8)后得到: 11111111 11111111 11111111 11110111 //第一位是符号位,1代表负号,表示这是一个负数;记住运算和运算结果都是用补码表示的,这是某个数的补码,我们还需要推导反码和原码 反码=补码-1,即: 11111111 11111111 11111111 11110110 原码(符号位不变,其他位取反): 10000000 00000000 00000000 00001001 所以结果是:-9 ?>