day05.无符号数和有符号数

第5节 无符号数和有符号数
1、无符号数的编码规则
  很简单的问题,但是有很多人在这个问题上纠结,包括有经验的程序员也在这个问题上纠结,原因是什么?他们不知道问题的本质,那么我们看一下上一节课讲的数据的宽度,比如:如果数据宽度就是1个字节,那么这1个字节它能存储的数据的范围是有限的,范围是多少呢?从0~0xFF,这个就是1个字节存储的范围,从最小到最大,那么问题又来了在这个里面数据代表什么意思呢?比如说我现在有1个字节里面有8个位,8个位里面存储了什么呢?存储的就是01010101的数值,没有人能答的出来。如果告诉你这个是一个文本文件,那么01010101就是表示逗号,如果告诉你这个是一个exe程序文件,那么实际上代表一个指令。这就依偎着知道计算机里面任何的文件到它里面存储的时候都会变成0和1的数值。那不同的文件的0和1,它代表着不同的意义。那么好了,我们现在告诉你说这里面存着的这个数,就是一个无符号的数,你告诉我它是什么?
  如果你已经告诉我了它是一个无符号的数值,那我们就要按照无符号的数值去解析它(这是无符号的编码规则)。已经告诉你了编码规则,如果它是文本文件,那么就要按照文本文件的编码规则解析它,再如果是视频文件,那就要按照视频文件的编码规则解析它。
  
  现在你告诉我是无符号数,那么就要按照无符号数解析它。从它这个角度就比较好理解了,无符号数的编码规则非常简单,就是这个数是多少,那我们就存多少。这个怎么理解呢?看一下10011010,就是这个值最终无符号里面存储的数值。如果想用16进制显示的话,每4个为一组,1001是9而1010是A,最终无符号数是9A(0x9A),如果不喜欢16进制的话,给它转成10进制是154。总之文件不同解析的方式也不同,这个就是无符号的编码规则。
  
  2、有符号数,正数编码规则
  如果是00011010,它现在是有符号数,那用有符号数的解析它。它的规则和无符号数的规则完全不一样的,如果是10011010最高位时1,说明它是一个负数,如果最高位是0说明它是一个正数,有符号数的编码规则,如果按照最高位是0的正数表示的时候,它的编码规则和无符号数是一样的。
  例子:
  int main()
  {
      int x=0x1A000000;
      printf("以无符号数表示:%u\n",x);
      printf("以有符号数表示:%d\n",x);
      
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随行之旅

python国产化自动化

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值