zoukankan      html  css  js  c++  java
  • 二进制的原码、反码、补码及相关计算

    1.二进制的最高位是符号位,0表示正数,1表示负数
    2.正数的原码、反码、补码都一样
    3.负数的反码=它原码符号位不变,其他位取反(0->1,1->0)
    4.负数的补码=它的反码+1
    5.0的反码、补码、都是0
    6.php没有无符号数,就是说php中的都是有符号的
    7.在计算机运算的时候都是以补码的方式来运行的

    1 如:
    2 以下实例都以4个字节举例说明
    3 1 ---->原码  00000000 00000000 00000000 00000001
    4 1 ---->反码  00000000 00000000 00000000 00000001
    5 1 ---->补码  00000000 00000000 00000000 00000001
    6 
    7 -1 --->原码  10000000 00000000 00000000 00000001
    8 -1 --->反码  11111111 11111111 11111111 11111110    //符号位不变,其他位取反
    9 -1 --->补码  11111111 11111111 11111111 11111111    //等于反码+1
     1 求~2的结果
     2 2 --->原码   00000000 00000000 00000000 00000010   //正数的原码、反码、补码都一样,所以可以直接按位运算
     3 2的补码取反  
     4 00000000 00000000 00000000 00000010 ===> 11111111 11111111 11111111 11111101  //取反后变为负数,再按照负数求反码的规则得到反码
     5 取反后结果还是补码,再求反码 
     6 11111111 11111111 11111111 11111101 ===> 11111111 11111111 11111111 11111100  //负数的反码=它的补码-1
     7 再根据反码求原码
     8 11111111 11111111 11111111 11111100 ===> 10000000 00000000 00000000 00000011 //负数符号位不变,0变1,1变0
     9 10000000 00000000 00000000 00000011 ===> -3
    10 所以~2 = -3
     1 求~-5的结果
     2 -5 --->原码 10000000 00000000 00000000 00000101
     3 根据原码得到反码 
     4 -5的原码取反 --->11111111 11111111 11111111 11111010   //符号位不变(0->1,1->0)
     5 根据反码得到补码
     6 -5的补码 ---> 11111111 11111111 11111111 11111011   //负数的补码=反码+1
     7 再将补码取反
     8 11111111 11111111 11111111 11111011 ===> 00000000 00000000 00000000 00000100  //计算机底层运算都是在补码的基础上计算的,所以先得到补码再逐位取反
     9 00000000 00000000 00000000 00000100 是正数,它的反码、原码和补码一样
    10 00000000 00000000 00000000 00000100 ===>4
    11 所以~-5 = 4
  • 相关阅读:
    进入黑马day4Serlet与Tomcat
    进入黑马day3HTTP协议与tomcat协议
    进入黑马day1XML简单学习
    进入黑马day2解析xml三种方法(2)sax解析器解析
    进入黑马day3xml三种解析方法比较
    进入黑马day2解析xml三种方法(1)jaxp解析
    进入黑马day2解析xml三种方法(3)dom4j解析器
    进入黑马day1JunitTest测试
    进入黑马day1关于云计算
    系统分析入门
  • 原文地址:https://www.cnblogs.com/iaknehc/p/7103440.html
Copyright © 2011-2022 走看看