• 计算机系统存储有符号整数


    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]

  • 相关阅读:
    c++标准库容器【转】
    C++命名空间的解释 【转】
    [转载]定义、公理、定理、推论、命题和引理的区别
    待读论文
    矩阵分解 Matrix Factorization (RegularSVD) 实验总结
    Predicting the Next Location: A Recurrent Model with Spatial and Temporal Contexts AAAI2016
    Discovering Urban Functional Zones Using Latent Activity Trajectories TKDE 2015
    numpy
    python 编程 规范
    深度学习
  • 原文地址:https://www.cnblogs.com/zhangzs000/p/10339211.html
Copyright © 2020-2023  润新知