day06.数字的编码

第6节:数字的编码

假设我们有一个字节有8个位,8个位存储的数据是01010101,我问你这个数字存储是什么?大家现在考虑现在怎么回答。你首先会问存的是什么,我说里面存的是文本文件,那就按照文本文件来解析,我说是视频文件,那么就按照视频文件去解析。上一节讲解到无符号和有符号的第1位是0的时候怎么解析的,那我们回顾一下,我们假设是一个无符号数01010101,它的十六进制解析结果是55,如果要转换成十进制的话就是85。那么是有符号数的话,第1位是0的话,说明它是正数,因为正数和无符号数的解析方式是一样的。虽然你这个数现在是有符号数来解析,解析完后任然是55,这就是解析的结果。但是如果是11010101按照无符号数来解析你会吗?解析的结果是D5(0xD5),转成十进制是213。但是我告诉你这个是有符号数的话你该如何解析呢?我们需要了解一下概念和需要做那些铺垫。

有符号数的编码规则

概念是什么呢? 分为:1、原码 2、反码 3、补码

原码:最高位为符号位,其余各位为数值本身的绝对值
比如:1的原码如何来写,首先要决定数据的宽度,假设是一个字节(字节有8个位)
           1的原码是0000 0001
          
反码:
            正数:反码与原码相同
            负数:符号位为1,其余位对原码取反

补码:
            正数:补码与原码相同
            负数:符号位为1,其余对原码取反加1

例子:
            正数形式:

            如果是正数是1的话,1就等于0000 0001
           
            如果是正数是6的话,1就等于0000 0110
           
            负数形式:
           
            -1的原码是1000 0001
            -1的反码是1111 1110
            -1的补码是1111 1111    //FF
           
            -7的原码是1000 0111
            -7的反码是1111 1000
            -7的补码是1111 1001   //F9
           
  实验在内存中的存储的值:
 
            int main()
            {
                  char a =1;
                  printf("%x\n",&a)
                  return 0;
            }
           
              int main()
            {
                  char a =-1;
                  printf("%x\n",&a)
                  return 0;
            }
 
总结:
            1、正数原码存储形式
            2、负数补码存储形式
           
            无符号范围:0~FF
            有符号范围:
                                  正数:0~7F
                                  负数:FF~80
————————————————
版权声明:本文为CSDN博主「随行之旅」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/strom2418/article/details/79225964

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值