zoukankan      html  css  js  c++  java
  • PHP关于按位取反结果的推导过程

    哎呀几年过去,都快把大学学的计算机导论的知识给忘完了,现在来回顾一下按位去反的流程:

    <?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
    
    ?>
    

      

  • 相关阅读:
    源码实现 --> strcmp
    源码实现 --> strdel
    源码实现 --> strcpy
    SoC的Testbench中的简易bus_monitor(加入print函数)
    debian 安装后需做的几件事
    使用Perl合并文件
    一个简单的Verilog计数器模型
    Environment Modules简单使用
    Git push “fatal: Authentication failed ”
    使用SystemC进行硬件仿真
  • 原文地址:https://www.cnblogs.com/huangye-dream/p/4729558.html
Copyright © 2011-2022 走看看