zoukankan      html  css  js  c++  java
  • 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 

  • 相关阅读:
    执行truncate引发ORA-02266的问题分析
    一文搞懂MySQL-8.0 redo优化
    写给迷茫中的大一大二的学弟学妹,学渣逆袭中的个人经历与心得
    99+好友共同关注,公众号推荐
    Cesium
    Cesium
    Cesium
    Cesium
    虚拟化学习笔记-KVM虚拟化跨机迁移原理
    虚拟化学习笔记-KVM虚拟化跨机迁移原理
  • 原文地址:https://www.cnblogs.com/moris5013/p/9501037.html
Copyright © 2011-2022 走看看