字符型(char)数据在内存中的存储

由于此字符型只占一个字节 所以它就不存在大端存储和小端存储。

字符型数据在内存中的存储的是ASCII码值转换成的二进制的补码(有符号char的二进制也有原码,反码,补码之分)

↑的十进制的ASCII值为24

转换成二进制为00011000

所以↑在内存中存储的就是00011000

虽然数据在内存中都是以二进制的方式进行存储的,但是为了便于观察,显示的时候一般显示的是数据二进制转换成的十六进制

例如下图的调试中对内存的监视

c34b1a5f9aea45988ac552216f4833cf.png

上图的是小端存储,所以01,02等在开头

字符型数据分为有符号char(signed char)

和无符号char(unsigned char)

有符号char的8个比特位中

最高位(最左端的那一位)为符号位,符号位只表示正负(0为正,1为负)不存储数据

且有符号char在内存中存储的10000000被规定为是-128

上面说了:

有符号char的二进制也要原码,反码,补码之分

所以有符号char(signed char)

在内存中存储的11111111其实存储的是-1

因为—1的原码为10000001

反码为11111110

补码(等于反码+1)为11111111

而内存中存储的都是补码

所以有符号char的在内存中取值范围为10000000~01111111

换算成十进制就是-128~127

无符号char最高位(最左端的那一位)不为符号位,可以存储数据

且无符号数的原码,反码,补码相同

所以无符号char(unsigned char)

在内存中取值范围为00000000~11111111

换算成十进制为0~255

char,int,short int类型的值的加减其实是一个循环。

如下图是char类型的

e61a26a94a1649c784d8f768537485a0.png

 也就是说0~127之间+1就是实实在在的加了个1,如2+1=3

但当127+1就会变成-128

如果-128一直加1也最终会变成0,然后再循环

short,int类型的取值也类似

如下图

这一知识点在整型提升中有很大的作用

单独的一个char不标明是否有符号时,char是否有符号取决于编译器

那么怎么判断自己的电脑用的编译器char是有符号还是无符号的呢?

很简单只需简单的做个对比就行

如下图

所以我的电脑的编译器中只写char时char是有符号的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值