zoukankan      html  css  js  c++  java
  • 计算机系统存储有符号整数

    1、为什么负数总是比正数多存储一位,eg: 32 位的有符号整数,则其数值范围为 [−2^31,  2^31 − 1]?

    用一种不专业,但好理解的方式就是就是0,正0=》00,负0=》10。但是没有必要用2中表示0所以

    10000000 =》-128

    专业的话,先说计算机系统是用补码表示,然后用补码的优点(3个),如果用twos complement(二位补码法,通过一个公式计算出来)表示的话10 就是表示-2

    原则:

     1、0表示正,1表示负数;

     2、计算机为方便减法计算,在表示负数的时候引入补码机制,将减法变成加法统一运算。那如何运算,负数整数部分取反得到反码,反码+1的到补码。

     在计算机系统中,数值一律用补码进行表示和存储。原因在于使用补码可以将符号和数值统一处理,同时加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

    补码:正整数的补码是其二进制表示,与原码相同;负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1

    反码:正数的反码与其原码相同;负数的反码是对正数逐位取反,符号位保持为1;

     现实生活的例子,10点加8点=》6点; 10点减去4点=》6点;也就是说 10-4的运算可以转化成10+8;4和8互为补数。对于计算机而言,8位二进制系统的模为2^8。在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。把补数用到计算机对数的处理上,就是补码。

    用补码表示的3个优点:

    统一加减法,统一正负数,补码和原码转换方式一样无需额外的硬件电路

    2、无符号n比特正数表示的范围是多少

    [0,  2^n-1]

  • 相关阅读:
    计算机网络面试小知识总结(转载)
    williamisnotme@gmail.com
    jdk1,8 HashMap
    Mybatis 为什么不要用二级缓存
    CPU,寄存器,一缓二缓.... RAM ROM 外部存储器等简介
    一级缓存,二级缓存
    mock单测
    java8函数式编程(转载)
    volatile解析
    JVM 技术分享(初级)
  • 原文地址:https://www.cnblogs.com/zhangzs000/p/10339211.html
Copyright © 2011-2022 走看看