目录
1.数据类型介绍
类型的意义
- 决定了这个类型开辟内存空间的大小
- 如何看待内存空间的视角
整形数据类型
字符型:
char类型可以和int型进行转换
char虽然是字符类型,但字符类型存储的是ASCII码值,ASCII码是整数
类型 | 占用字节 | 比特位 | 状态数量 | 取值范围 |
---|---|---|---|---|
unsigned char | 1字节 | 8位 | 256(28) | [0~255] |
signed char | 1字节 | 8位 | 256(28) | [-127~128] |
char | 1字节 | 8位 | 256(28) | [-127~128] |
短整型:
类型 | 占用字节 | 比特位 | 状态数量 | 取值范围 |
---|---|---|---|---|
unsigned short | 2字节 | 16位 | 65536(216) | [0~65535] |
signed short | 2字节 | 16位 | 65536(216) | [-32768~32767] |
short | 2字节 | 16位 | 65536(216) | [-32768~32767] |
整型:
类型 | 占用字节 | 比特位 | 状态数量 | 取值范围 |
---|---|---|---|---|
unsigned int | 4字节 | 32位 | 4294967295(232) | [0~232] |
signed int | 4字节 | 32位 | 4294967295(232) | [-231~231-1] |
int | 4字节 | 32位 | 4294967295(232) | [-231~231-1] |
长整型:
类型 | 占用字节 | 比特位 | 状态数量 | 取值范围 |
---|---|---|---|---|
unsigned long | 4字节 | 32位 | 42949672952(232) | [0~232] |
signed long | 4字节 | 32位 | 4294967295(232) | [-231~231-1] |
long | 4字节 | 32位 | 4294967295(232) | [-231~231-1] |
long long | 8字节 | 64位 | 264 | [-263~263-1] |
浮点数据类型
浮点型:
类型 | 占用字节 | 比特位 | 取值范围 |
---|---|---|---|
float | 4字节 | 32位 | [-3.4E+38~3.4E+38] |
double | 8字节 | 32位 | [-1.7E-308~1.7E+308] |
构造类型
类型 |
---|
数组类型(数组int arr[10]的类型是int [10]) |
结构体类型 struct |
枚举类型 enum |
联合类型 union |
指针类型
类型 |
---|
字符指针char* |
整形指针int* |
浮点型指针float* |
空类型指针void* |
结构体指针struct (xxx)* |
空类型
viod表示空类型(无类型)
通常用于函数的返回类型,函数的参数,指针类型
C语言有没有字符串类型?
c语言没有string类型,c语言中字符串是通过字符指针来间接实现的。
2.整形在内存中的存储
2.1有符合和无符号的存储特点(仅仅是输出时这么看,转码时无视)
以short来举例
如果是unsigned short类型,则所有位都为数值位
如果是signed short或者short类型时
最高位为符号位,其他位为数值位
但我们不能直接去通过二进制将所存储的二进制数直接转换成十进制数字,因为计算机在存储整形时,存储的是一种叫补码的码类
2.2原码、反码、补码
计算机的整数有三种存储方式:原码、反码、补码
原码
直接将二进制按照正负数的形式翻译成二进制
反码
将原码符号位不变,其他位按位取反
补码
在反码的基础上+1
//正整数:原码反码补码都相同
//负整数:需要翻译成原码转换成反码再转成补码
//计算机在内存中只存储补码
我们通过举例来分别说明,原码反码补码
上面所描述的有无符号只有输出时看做为此,而转换原码反码补码把数字都当做有符号,此时只看数字时>0还是<0,并加符号位
1.正整数
a=10
因为a>0,所以a此时为正整数
所以a的原码反码补码都相同
第一位为符号位,因为a>0所以符号位为0
10
00000000000000000000000000001010//原码
00000000000000000000000000001010//反码
00000000000000000000000000001010//补码
2.负整数
a=-10
因为a<0,所以a此时为负整数
所以a需要翻译成原码转换成反码再转成补码
因为a<0所以符号位为1
-10
10000000000000000000000000001010//原码
111111111111111111111111111111110101//反码(符号位不变其他位按位取反)
111111111111111111111111111111110110//补码
char类型有无符号是 不缺定的,只能取决于你所使用的C语言编译器