设为首页 收藏本站
查看: 588|回复: 0

[经验分享] php中按位取反~的理解

[复制链接]

尚未签到

发表于 2018-12-18 12:39:12 | 显示全部楼层 |阅读模式
  昨天晚上在看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了,我想这个就清楚了吧!现在是否明白了呢。。。
        




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-652860-1-1.html 上篇帖子: Eclipse的PHP插件PHPEclipse安装和使用 下篇帖子: LAMP网站平台的构建和PHP应用部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表