php中按位取反~的理解
admin
2023-06-26 14:02:23
0

    昨天晚上在看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了,我想这个就清楚了吧!现在是否明白了呢。。。<谢谢大家支持,成长从博客开始>

      

相关内容

热门资讯

美国中期选举:谁是骄兵必败,谁... 【文/观察者网专栏作者 周德宇】从特朗普二次执政以来,其民调可以说是一路雪崩,连累着共和党也一起遭殃...
芗城区科协开展全国科技工作者日... 5月27日,芗城区科协联合东铺头街道、瑞京社区等单位,走进芗城实幼东铺头园区,开展芗城区全国科技工作...
诺基亚发布新手机,售价199元... 5月29日,诺基亚官宣推出200 4G手机,售价199元,是首款微聊手机,可通过微信小程序与其他手机...
“超智算一号”算力卫星发布,石... 新京报讯(记者王景曦)随着数字经济与航天技术深度融合,太空算力已成为国家新型基础设施建设的战略制高点...
美财长:多年来美国一直处于沉睡... 据凤凰卫视报道,美国财政部长贝森特5月29日在里根国家经济论坛上发表演讲,为特朗普的“美国优先”经济...
菲律宾正成为日本“新型军国主义... 【文/观察者网专栏作者 丁铎】菲律宾总统费迪南德·小马科斯于2026年5月26日至29日对日本进行国...
要不要“卸磨杀驴”?印尼陷入两... 【文/观察者网专栏作者 罗仪馥】据报道,印尼中国商会总会近日向普拉博沃总统发出一封英文信函,直指该国...
新加坡贸易关系部长:新加坡正承... 中东局势持续紧张,正在通过能源、航运和供应链等渠道影响全球经济。对于高度依赖贸易、能源进口和国际物流...
原创 国... 当传统山水风光遇上前沿国产科技,国内知名山岳景区正在悄然完成一场体验变革。以黄山接入国产大模型、泰山...
2026深圳厂区人员定位技术升... 深圳厂区人员定位系统是依托无线传感与射频识别技术,对工业厂区、隧道作业等封闭或半封闭场所内的人员位置...