大小端储存,signed char的范围

大小端储存

  当有一个数值超过一个字节,储存到内存当中就有顺序的问题存在。就存在大段和小段两种储存方法。

大端储存模式:数据的低位储存在内存的高地址中,而数据的高位储存在内存的低地址中。

小端储存模式:数据的低位储存在内存的低地址中,而数据的高位储存在内存的高地址中。

我们常用的vs编译器就采用小端模式。

 

   unsigned char c=-1 打印出来等于225。我们可以知道unsigned 并不是单纯的去掉数值符号。但是为什么会打印出225呢?

char 类型占一个字节也就是 00000000 有2^8个数值的容量。 数值在内存中的储存是补码所以signed char 和 unsigned char 的容量概念如下。

      00000000
     00000001     
       .............
      01111111
     10000000     
      10000001
      10000010
      ..............
       11111110
        11111111

                                             signed    char  

 signed char 补码的第一位是字符位,表现为0为正数,1为负数。 所以当转为原码输出时               补码10000001—>反码10000000—>原码11111111 转为十进制就是-127。而10000000认为规定为-128.      signed char 的范围是127~-128

      00000000
     00000001     
       .............
      01111111
     10000000     
      10000001
      10000010
      ..............
       11111110
        11111111

                                              unsigned    char  

 unsigned char 没有符号位的概念所以 unsigned char的范围就是0~255

所以也就解释了 printf("%d",unsigned char c)是255了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值