目录
数据类型
整形家族
- char (一个字节) 又可分为unsigned char 和signed char
- short (两个字节) unsigned short 和signed short
- int(四个字节) unsigned int 和signed int
- long(八个字节) unsigned long 和signed long
unsigned为无符号的,signed为有符号的。
字符型char在数据中存储的是ASCLL码值,又因为ASCLL码值为整形,所以char属于整形家族
浮点数家族
- float (四个字节)
- double(八个字节)
浮点数在数据中的存储很特别,虽然float和int的大小一致,但其存取的方式不一样。
构造类型
构造类型是自定义的类型。
- 数组类型 (基本数据类型) 数组名 [元素个数] int arr [10]
- 结构体类型 struct
- 枚举类型 enum
- 联合类型 uniom
指针类型
- int* p 整形指针 访问权限:四个字节 加减1跳过四个字节
- char* p 整形指针 访问权限:一个字节 加减1跳过一个字节
- float *p 整形指针 访问权限:四个字节 加减1跳过四个字节
- void* p 无具体类型指针,可以将任意类型地址赋值给他
指针具体内容请访问:https://blog.csdn.net/Dreamswi/article/details/132077131?spm=1001.2014.3001.5502
空类型
void 为空类型,通常用于函数返回类型,函数参数,以及指针。
数据存储
原码反码补码
在内存中数据是以二进制存储的,并且存储的是补码。
以10和-10为例(int a=10)
—— | 10 | -10 |
原码 | 00000000000000000000000000001010 | 10000000000000000000000000001010 |
反码 | 00000000000000000000000000001010 | 11111111111111111111111111110101 |
补码 | 00000000000000000000000000001010 | 11111111111111111111111111110110 |
a为整形,大小为四个字节,有32个比特位可以用来存储,第32位表示正负,0为正,1为负。
正数的原码补码反码均相同。
而负数让原码反转(即0变成1,1变成0)得到反码,反码+1得到补码。想要拿到原码可以逆转这个过程,当然编译器是通过补码反转后+1得到原码。
大小端存储
大端存储:是指一个数据的低位字节序的内容放在高地址处,高位字节序存的内容放在低地址处。
小端存储:是指一个数据的低位字节序内容存放在低地址处,高位字节序的内容存放在高地址处。
浮点型的存储
S:确定正负号 E=浮点数的指数 M=有效数字
表达方式: (-1)^S * M * 2^E
- float:
- (S(1bit) E(8bit) M(23bit))共32bit
- 十进制:0.5 5.5
- 二进制:0.1 101.1
- 1.0*2^-1 1.011*2^2
- S=0 M=1.0 E=-1 S=0 M=1.011 E=2
- S=0 M=0 E=-1+127 S=0 M=011 E=2+127
- double:
- (S(1bit) E(11bit) M(52bit))共64bit
- 十进制:0.5 5.5
- 二进制:0.1 101.1
- 1.0*2^-1 1.011*2^2
- S=0 M=1.0 E=-1 S=0 M=1.011 E=2
- S=0 M=0 E=-1+1023 S=0 M=011 E=2+1023
注:因为空间有限,为了存储更大的数据,M一般会省略小数点前的1,取出时编译器会自动加上1
两种特殊情况:
当E为全0时,E=1-127或者E=1-1023即为真实值。有效数字N不再加上第一位1。(这样做是表示正负0,以及接近0的小数)
当E为全1时,如果有效数字M全为0,表示+-无穷大。