php中按位取反~的理解-创新互联
昨天晚上在看php书籍的时候,看到到了一个操作符“~”解释是按位取反操作符,因为平时用得不多所以对它不是很了解,所以顺便网上收了一下,感觉讲的不是特别清楚,所以我花了点时间研究了一下,终于有点成果,所以在此为大家分享一下,如果说的有误还请大家批评指出。好了,下面就来说说这个按位取反的运算方式。
成都网站建设、网站制作,成都做网站公司-创新互联公司已向上千余家企业提供了,网站设计,网站制作,网络营销等服务!设计与技术结合,多年网站推广经验,合理的价格为您打造企业品质网站。首先按照操作元来划分操作符,比如:$a>$b、$a>$b?1:0。第一个表达式中操作元是两个分别是$a和$b,所以这被称为二元运算,依此,表达式二就是三元。因此按位取反也就是一元运算符如:$a=~$b;
其次我们要了解计算机运算时存储的数据是0,1这种二进制数据。并且是以源码的补码形式存储,下面引出三个概念:
源码:一个整数,按照绝对值大小转换成二进制数,高位为符号位是需要保留的。高位0表示正数,1表示负数,比如(-3:1000 0000 0000 0000 0000 0000 0000 0011)。
反码:就是源码的反转,高符号位除外,其余的1变0,0变1。
补码:也就是计算机存储的数据,定义为源码的反码加1。 (注意:正数的补码也就是它源码本身)
这里还有一个东西需要说明,刚才在对源码进行阐述的时候看到-3这个数占了32位,我们就在考虑为什么是32位而不是其他的呢。其实我们可以了解到php5.X版本中整数的大最小区间为-2e31到+2e31
其中有个符号位所以数值表达高就是31次幂。在php的高版本中会达到64位也就是-2e63到+2e63,因为现在用的普片较多的版本就是5.X的版本所以就以32位二进制来讲。
好了,现在对概念都理解了,下面我们就来看看具体操作:
先来看代码运算结果
上面是-3按位取反后得到2,我们用上面的理论来分析一下:
-3源码:1000 0000 0000 0000 0000 0000 0000 0011
反码:1111 1111 1111 1111 1111 1111 1111 1100
补码:1111 1111 1111 1111 1111 1111 1111 1101 (反码加1得到补码)
现在执行按位取反操作后:
补码:0000 0000 0000 0000 0000 0000 0000 0010
反码:0000 0000 0000 0000 0000 0000 0000 0010
源码:0000 0000 0000 0000 0000 0000 0000 0010
为什么执行按位取反后源码和补码相同?嗯,其实上面已经解释了,在源码进行补码转换的时候符号位是不变的。我们看到按位取反操作后补码的符号位为0表示正数,而正数的补码就是源码本身。所以源码十进制换算后就是2了,我想这个就清楚了吧!现在是否明白了呢。。。<谢谢大家支持,成长从博客开始>
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章题目:php中按位取反~的理解-创新互联
当前链接:http://scyanting.com/article/iseop.html