• 2022-09-05 符号位、浮点数、原码、补码、反码、移码


    无符号数和有符号数

    无符号数

    无符号表示范围
    1个字节,十六位表示范围0x00~0xFF,十位表示范围0~255;
    2个字节,十六位表示范围0x0000~0xFF,十位表示范围0~65535。

    有符号数

    以最高位表示数字正负数,0位正,1为负;
    在这里插入图片描述

    小数点的位置以约定的位置,如4字节最高位表示符号位,剩余31位有8位指数位23位尾数位构成。

    浮点数

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    真值、原码、补码和反码

    真值

    也就是日常中使用的算数值1、-1、2、-2具有正负数的值;

    原码

    在计算机中完全是由0或1组成的,这里使用1个字节也就是8个bit进行表示;只用在正负数上与真值有较大的差异。原码是在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0,在原码中区分正负零),其余位表示数值的大小。

    例子:

    • 真值1,原码表示为0x00000001
    • 真值-1,原码表示为0x10000001
    • 真值2,原码表示为0x00000010
    • 真值-2,原码表示为0x10000010

    补码

    由于原码(+0=-0)在计算中不方便进行计算,则使用补码进行加法运算;补码正数则是自身,负数则是原码的取反加一。

    例子:

    • 真值1,原码0x00000001,补码表示为0x00000001
    • 真值-1,原码0x10000001,补码表示为0x101111111
    • 真值2,原码0x00000010,补码表示为0x00000010
    • 真值-2,原码0x10000010,补码表示为0x11111110

    1个字节计算:

    • (+2) + (-1)0x00000010 + 0x11111111 = 0x00000001,也就是1;
    • (+2)-(-1)则转变为(+2)+(+1)也就是将0x00000010 - 0x11111111转变为0x00000010 + 0x00000001=0x00000011,也就是3。

    将减法操作转为加法操作,进而简化cpu处理逻辑。

    反码

    反码(+0!=-0)与补码的区别在于原码进行转换时,只需要取反,不用加1。

    移码

    对于存在计算中的数字在进行比较大小时,如何区分1和-1的大小呢,所以就需要移码了,对于1个字节也就是8个bit表示为1和-1的补码,需要加2^8次方,再进行比较

    在这里插入图片描述

    也就是在符号位上加1,这样再进行数值比较时,就不会出错了

    在这里插入图片描述

    总结

    • 对于正数,原码=补码=反码
    • 对于负数,符号位为1,其数值部分(原码除符号位外每位取反末位加1 得补码;原码除符号位外每位取反 得反码)
  • 相关阅读:
    asp.net健身会所管理系统sqlserver
    【C语言基础】:深入理解指针(终篇)
    JAVA设计模式-工厂模式(Factory Pattern)
    一文搞懂ES6基本全部语法
    Vue+element 首页业务实现
    12KM02E-V0002 3EGM030300R0002 模块化和加固的边缘计算加速
    阿里云物联网IOT平台使用案例教程(模拟智能设备)
    Kubernetes tmpfs
    LDO线性稳压器要不要并联二极管?
    todoList清单(HTML+CSS+JavaScript)
  • 原文地址:https://blog.csdn.net/qq_19152901/article/details/126734485