由于此字符型只占一个字节 所以它就不存在大端存储和小端存储。
字符型数据在内存中的存储的是ASCII码值转换成的二进制的补码(有符号char的二进制也有原码,反码,补码之分)
例
↑的十进制的ASCII值为24
转换成二进制为00011000
所以↑在内存中存储的就是00011000
虽然数据在内存中都是以二进制的方式进行存储的,但是为了便于观察,显示的时候一般显示的是数据二进制转换成的十六进制
例如下图的调试中对内存的监视
上图的是小端存储,所以01,02等在开头
字符型数据分为有符号char(signed char)
和无符号char(unsigned char)
有符号char的8个比特位中
最高位(最左端的那一位)为符号位,符号位只表示正负(0为正,1为负)不存储数据
且有符号char在内存中存储的10000000被规定为是—128\n\n上面说了:
有符号char的二进制也要原码,反码,补码之分\n\n所以有符号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类型的
也就是说0~127之间+1就是实实在在的加了个1,如2+1=3
但当127+1就会变成—128
如果—128一直加1也最终会变成0,然后再循环
short,int类型的取值也类似
如下图
这一知识点在整型提升中有很大的作用
单独的一个char不标明是否有符号时,char是否有符号取决于编译器
那么怎么判断自己的电脑用的编译器char是有符号还是无符号的呢?
很简单只需简单的做个对比就行
如下图
所以我的电脑的编译器中只写char时char是有符号的