• C语言 数据存储方式


    C语言 数据存储方式

    一、源码

    一个数的原码(原始的二进制码)有如下特点:

    • 最高位做为符号位,0表示正,为1表示负

    • 其它数值部分就是数值本身绝对值的二进制数

    • 负数的原码是在其绝对值的基础上,最高位变为1

    下面数值以1字节的大小描述:

    十进制数

    原码

    +15

    0000 1111

    -15

    1000 1111

    +0

    0000 0000

    -0

    1000 0000

    注:原码表示法简单易懂,与带符号数本身转换方便,只要符号还原即可,但当两个正数相减或不同符号数相加时,必须比较两个数哪个绝对值大,才能决定谁减谁,才能确定结果是正还是负,所以原码不便于加减运算。

    二、反码

    对于正数,反码与原码相同
    对于负数,符号位不变,其它部分取反(1变0,0变1)

    十进制数

    反码

    +15

    0000 1111

    -15

    1111 0000

    +0

    0000 0000

    -0

    1111 1111

    注:反码运算也不方便,通常用来作为求补码的中间过渡。

    三、补码

    1、补码说明

    计算机系统中,数值一律用补码来存储。

    补码特点:

    • 对于正数,原码、反码、补码相同

    • 对于负数,其补码为它的反码加1

    • 补码符号位不动,其他位求反,最后整个数加1,得到原码

    十进制数

    补码

    +15

    0000 1111

    -15

    1111 0001

    +0

    0000 0000

    -0

    0000 0000

    2、补码的意义

    在计算机系统中,数值一律用补码来存储,主要原因是:

    • 统一了零的编码

    • 将符号位和其它位统一处理

    • 将减法运算转变为加法运算

    • 两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃

    示例:用8位二进制数分别表示+0和-0

    十进制数

    原码

    +0

    0000 0000

    -0

    1000 0000

     

    十进制数

    反码

    +0

    0000 0000

    -0

    1111 1111

    说明:不管以原码方式存储,还是以反码方式存储,0也有两种表示形式。但是如果以补码方式存储,补码统一了零的编码:

    十进制数

    补码

    +0

     0000 0000

    -0

    10000 0000由于只用8位描述,最高位1丢弃,变为0000 0000

    四、案例演示

    模拟计算机运算


    1)  76 - 32

    计算机算法:76+(-32)


    2) 76

    源码:0100 1100

    反码:0100 1100

    补码:0100 1100


    3) -32

    源码:1010 0000

    反码:1101 1111

    补码:1110 0000


    4) 相加

    1110 0000

    0100 1100


    5) 验算

    结果:1 0010 1100

    舍弃补码:0010 1100

    结果补码:0010 1100

    反码:0010 1100

    转换源码:0010 1100

    注:由于舍弃补码0为正数,则转换源码与补码相同。


    6) 结果:44


    注意事项:

    1、符号位 正数:0

    2、符号位 负数:1

    3、补码计算结果,符号位超出大小限制则省略符号位

    4、补码结果:开头数字是1时、根据负数规则转为源码、开头0是为正数转换

    5、正数:源码、反码、补码、相同

    6、负数源码转反码:符号不变,其他位0变为1、1变为0

    7、负数反码转补码:反码的结果之上加1

    8、加完或减完结果 不能大于或小于负的127


  • 相关阅读:
    H5及微信中唤起app的解决方案
    html5统计数据上报API:SendBeacon
    基于webpack4的react开发环境配置
    electron-vue开发爬坑指南
    利用git 进行多人协作开发
    js 性能优化利器:prepack
    各种渲染方式对比解析
    Nuxt.js部署应用的方式
    微信小程序--data的赋值与取值
    甘超波:什么是个人定位
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/12371424.html
Copyright © 2020-2023  润新知