zoukankan      html  css  js  c++  java
  • 为什么 ~127 = -128 ?(转载)


    原文链接:https://www.jianshu.com/p/fd9d50945bb9

    我们都知道,表示二进制有符号数有三种方式,即原码、反码和补码,而计算机中一律使用补码进行存储和运算。正数和0的补码与其原码相同,负数的补码则是其对应的反码加1得到。

    假设字长为n比特,原码、反码能够表示的有符号数真值范围都是[-2n-1+1, 2n-1-1],而补码能够表示的真值范围是[-2n-1, 2n-1-1],最小值多出来了一个。以下我们假设n=8,那么原码/反码表示法的范围是[-127, 127],而补码表示法的范围是[-128, 127]。-128就是那特殊的一个,并且它在补码体系下没有原码和反码。

    在原码和反码表示法中,0有两种表示方式,分别为正0(0000 0000)和负0(1000 0000/1111 1111),然而在正常的算数中,0是不应该有符号的。补码表示法则没有这种区分,不论正0还是负0都会表示为0000 0000(负0取反加1丢掉溢出位后也是这个结果),所以补码正好能用1000 0000多表示一个数。根据上述补码表格中“递减”的规律,把1000 0000放在-127的后面,表示-128正合适(1000 0000 + 0111 1111 = 1111 1111 = -1),也符合符号位为1表示负数的惯例。



  • 相关阅读:
    CString常用方法简介
    @PostConstruct与@PreDestroy
    Servlet知识
    Extjs ——radiogroup子元素宽度调整
    JS的Document属性和方法
    sql server
    C#中的结构,练习
    datagridview实现复制粘贴
    VS.NET2010水晶报表安装部署[VS2010]
    C#中基础知识积累
  • 原文地址:https://www.cnblogs.com/heureuxl/p/13192298.html
Copyright © 2011-2022 走看看