• 8位字节表示的有符号数范围是-128~127


    1  计算机中数值都是按补码来存储的。

    原码(原码是带符号位的):第一位表示符号位,0表示正数,1表示负数。符号位加上真值的绝对值

    比如  

       0 0 0 0   0 0 0 1  表示正1   

       1 0 0 0   0 0 0 1  表示负1

    反码:正数的反码就是原码, 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反(符号位不取反,数值位取反)

        0 0 0 0   0 0 0 1  表示正1   

      1 1 1 1   1 1 1 0  表示负1  

    这时候就产生了一个问题,正零和负零用反码表示不一致,这样不合理

     0 0 0 0   0 0 0 0  表示正0

     1 1 1 1   1 1 1 1  表示负0

    补码:正数的补码就是原码,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1(反码+1)

     0 0 0 0   0 0 0 0  表示正0

     0 0 0 0   0 0 0 0  表示负0

    这样 0 0 0 0   0 0 0 0  表示零了,正零和负零统一了

    补码的好处:

    统一了0的表示

    符号位也可以当作数值一样参与运算

    八位字节,算上符号能够表示的范围是2^8=256个数。

    -128 ~ 127  正好是256个数

    补码  1 0 0 0 0  0 0 0 1  求原码  ,表示的数是 - 127 

    补码 1 0 0 0 0  0 0 0 0  求原码得出来的是0 0 0 0  0 0 0 0 ,这个是0的原码 。这时,人为规定补码 1 0 0 0 0  0 0 0 0 表示的值是-128 

    所以 0 0 0 0   0 0 0 0  表示零

       1 0 0 0   0 0 0 0 表示-128 

    ---------------------------------------------------------------------

    原码和补码的相互转换

    正数的补码与原码相同

    9的补码是 0000 1001

    负数的补码 ,先得到他的原码,再得到反码+1

    -15   1000 1111  ===》 1111 0000   ===》  1111  0001 

     数0的补码表示是唯一的    0000  0000 

    已知补码求原码:

    如果符号位是0  ,表示是一个正数,其原码就是补码

    如果符号位是1  ,表示是一个负数,其原码是 符号位不变,其余位取反后加1

    补码(1111 1001) 1000 0110   ==》 (原码)1000 0111 

  • 相关阅读:
    查看Ubuntu版本
    CentOS下实现postgresql开机自启动
    CentOS下查看crontab执行历史记录
    经常使用的一个python logging封装,支持同时向console和文件输出
    crontab中执行postgresql命令
    postgresql下一种对已有数据进行重新分表的plpgsql脚本
    2012需要分析的一些技术(1)
    Python Extension Packages for Windows
    一个简单的根据行数对大文件进行分片的python程序
    偶拾
  • 原文地址:https://www.cnblogs.com/moris5013/p/9501037.html
Copyright © 2020-2023  润新知