zoukankan      html  css  js  c++  java
  • 计算机原码, 反码,补码的介绍

     原码是什么?

          原码就是早期用来表示数字的一种方式: 一个正数,转换为二进制位就是这个正数的原码。负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码

          举例说明:

          int类型的 3 的原码是 11B(B表示二进制位), 在32位机器上占四个字节,那么高位补零就得:

          00000000 00000000 00000000 00000011

          int类型的 -3 的绝对值的二进制位就是上面的 11B 展开后高位补零就得:

          10000000 00000000 00000000 00000011      

          但是原码有几个缺点,零分两种 +0 和 -0 。很奇怪是吧!还有,在进行不同符号的加法运算或者同符号的减法运算的时候,不能直接判断出结果的正负。你需要将两个值的绝对值进行比较,然后进行加减操作 ,最后符号位由绝对值大的决定。于是反码就产生了。

     反码是什么 ?

          正数的反码就是原码,负数的反码等于原码除符号位以外所有的位取反

          举例说明:

          int类型的 3 的反码是

          00000000 00000000 00000000 00000011

          和原码一样没什么可说的

          int类型的 -3 的反码是

          11111111 11111111 11111111 11111100

          除开符号位 所有位 取反

          解决了加减运算的问题,但还是有正负零之分,然后就到补码了

    补码是什么?

          正数的补码与原码相同,负数的补码为 其原码除符号位外所有位取反(得到反码了),然后最低位加1.

          还是举例说明:

          int类型的 3 的补码是:

          00000000 00000000 00000000 00000011

          int类型的 -3 的补码是

          11111111 11111111 1111111 11111101

          就是其反码加1

    有个疑问:

    用一个字节8位来表示机器数,用原码、反码、补码来表示,其中最高位为0时表示整数,最高位为1时表示负数。

    原码表示的范围为-127,。。。,-0,+0,。。。,+127,其中0的表示不唯一,分+0和-0两种。

    [-0]原码为10000000      [+0]原码为00000000    

    正数的反码和原码相同, 负数的反码为原码最高位不变其他位求反

    反码表示的范围为-127,。。。,-0,+0,。。。,+127,其中0的表示不唯一,分+0和-0两种。

    正数的补码和原码、反码相同,负数的补码为反码加1

    因为补码中0的表示唯一,-0和+0的表示都是00000000,即为原码0的表示,因此-0的原码10000000都多出来用来表示-128

    补码表示的范围为-128,-127,。。。,-0,+0,。。。,+127,其中0的表示,唯一

    补码10000000比较特殊,最高位不仅表示符号“-”,而且表示数值。
    ---------------------

    参考:https://blog.csdn.net/gyysmall/article/details/8052382?utm_source=copy 

    参考:https://www.cnblogs.com/hanhuo/p/6341111.html

  • 相关阅读:
    新手建站必看
    88.com域名邮箱免费注册了
    屏蔽博客园的广告
    跳过烦人的hCaptcha验证
    pap.er 专为 Mac 设计的壁纸应用
    TrafficMonitor
    利用CloudFlare自动DDNS
    P.SDA1.DEV
    谷歌浏览器又隐藏的HTTPS和WWW前缀
    谷歌浏览器扩展 crx 下载
  • 原文地址:https://www.cnblogs.com/imfjj/p/9778302.html
Copyright © 2011-2022 走看看