- 数据在内存中的存储
- 数据类型介绍
- 整型在内存中的存储
- 正负整数的存储
- 大小端存储
基本的内置类型:
- char //1字节
- short //2字节
- int //4字节
- long //4字节
- long long //八字节
- float //4字节
- double //8字节
注意:C语言中并没有字符串类型,常说的字符串本质是字符指针或字符数组
类型是用来定义不同的变量的,其本质就是开辟不同大小的空间。
那么不同的类型所能表示的范围该怎么计算呢?
以char类型为例:
char类型有分有符号和无符号两种,有符号char所能表示的范围是-128~127,无符号char所能表示的范围是0~255
那么这两种范围是怎么来的呢?
- 无符号char类型
char类型的大小是1字节,也就是8bit,当8个bit位全为0时是所能表示的最小数,全为1时是所能表示的最大数。
(BIN)0000 0000 = (DEC)0
(BIN)1111 1111 = (DEC)255
- 有符号char类型
对于有符号类型,那么8bit的最高位表示的是符号位。
最大正数 (BIN) 0111 1111 = (DEC)127
因为负数在计算机中是以补码来计算的,所以不好直接求取。可以换种方式。从无符号char类型可以看出,char其最多能存储256个数据,256/2=128.
所以有符号char类型的范围也就是 -128~127
在不明确写出unsigned char时,直接写char默认为有符号类型,所以其表示的范围为-128~127.
那么问题来了:
char ch1 = 129;
char ch2 = -129;
分别表示多少呢?
ch1 = 129 = -127
ch2 = -129 = 127
也就是说,对于有符号char类型来说:127+1=-128
-128 -1 = 127在碰到比较大的数字可以这么计算:
char ch = 4791491 = -61;
4791491 % 256 - 256 = -61;
其他内置类型的计算方式同char类型,这里就不一一赘述了。
整型在内存中的存储 正负整数的存储- 首先,无论正负,计算机都是以二进制的方式存储的。
- 其次,都是以二进制补码的方式存储的。只不过正整数的补码和原码相同。
原码、反码、补码
计算机中的有符号数有三种表示方法,即原码反码和补码。
三种表示方法均有符号位和数值位两部分,符号位都是0表示正,1表示负,而数值位的表示方法不太相同。原码:
直接将二进制按照正负数的形式计算出来就可以
反码:
正数:反码与原码相同
负数:符号位不变,数值位按位对原码取反。补码:
正数:补码与原码相同
负数:负数的反码+1
举例:
int x = 100;
原码:0000 0000 0000 0000 0000 0000 0110 0100
反码:0000 0000 0000 0000 0000 0000 0110 0100
补码:0000 0000 0000 0000 0000 0000 0110 0100
int y = -100;
原码:1000 0000 0000 0000 0000 0000 0110 0100
反码:1111 1111 1111 1111 1111 1111 1001 1011
补码:1111 1111 1111 1111 1111 1111 1001 1100
大端(存储)模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
小端(存储)模式:是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。
下面,用一个比较形象的图来理解一下大端小端:



