深度剖析char在内存中的存储

char 分为  有符号的(signed) 和无符号的(unsigned)

取值范围分别为:   

            signed char   -128~127

            unsigned char    0~255

char为字符型,但在内存中存储的却是ASCII码值,所以char实际上属于整型的一种

以 char a = 1 或 char a = -1为例

正数的原码,反码,补码相同

char a = -1 时   

最高位为符号位

原码   --    反码     符号位不变,其他位按位取反

反码   --    补码     反码+1

上图是整形 1 的 原码,反码,补码

但char类型在内存中只占一个字节(8个bit位),而int类型在内存中占4个字节(32个bit位),所以把int型放在char型中会发生截取

所以实际char a = 1的原码,反码,补码为

char a = -1 时 

内存中存储的是补码,计算机在运算时也是以补码运算

补码 --> 原码    取以上的方法或者取以上相反的方法(补码 -1得到反码,反码符号位不变,其他位按位取反)

接下来我们以题为例来深层次理解

运行结果

为什么会这样呢?

下面以图来解释

                                                                                                                  ps:补码

右边为正,左边为负

图中1000 0000 正是 -128

+1 为 0111 1111  十进制为 127

+2 为 0111 1110  十进制为 126

图中很好地证实了 char 类型运算超过了存储范围会怎么样

当char类型与int类型的只发生运算关系时会发生整形提升

此时a会从一个字节 提升为 四个字节   也就是从8个bit为提升为32个bit位

注意的是   有符号的(signed)按符号位提升,无符号的(unsigned)按0提升

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值