目录
整型家族
分类
char、short、int、long[int] 、long long[int]
整型家族的每一种类型都有无符号(unsigned)和有符号(signed)两种类型
各类型所占字节数
windows下
64位平台下
32位平台下
linux下
64位平台下
发现了吗?long这个类型所占字节的大小变成8了
这是因为C语言标准规定sizeof(long)>=sizeof(int)
如果你想定义占8个字节大小的整型,建议你用long long 而不是long
浮点型家族
float、double
float和double总是带符号的
printf("%d\n", sizeof(float));//4
printf("%d\n", sizeof(double));//8
在C语言中
对于整型家族的取值范围都定义在limits.h
对于浮点型家族的取值范围都定义在float.h
#define DBL_MAX 1.7976931348623158e+308 // max value
#define DBL_MIN 2.2250738585072014e-308 // min positive value
#define FLT_MAX 3.402823466e+38F // max value
#define FLT_MIN 1.175494351e-38F // min normalized positive value
数据类型还有构造类型、指针类型以及void空类型
构造类型有:数组、结构体(struct)、共用体(union)、枚举(enum)
void空类型:void 表示空类型(无类型)通常应用于函数的返回类型、函数的参数、指针类型
注意点:
1. void 是空类型,空类型对应的大小是0, 所以 void 无法开辟空间,即无法定义变量。
2. void 在linux 系统下大小为 1 个字节,但是系统认定 void 为空类型,同样无法定义变量。
3. 虽然 void 不能定义变量,但是 void* 可以,在 32 位平台下,任何类型的指针的大小都是4个字节,在64位平台下,任何类型的指针的大小都是8个字节,但是void*不能解引用。指针有float*,double*,int *,char*,void*等类型
4. C 语言中函数的返回值类型可以省略,但是省略之后默认为 int而不是void
5. void* 可以接收任何类型
整型在内存中的存储规则
正数、负数在计算机中是以二进制的形式存放
二进制就只有0和1,就好像十进制只有0~9,满10进1
二进制满2进1
正数、负数的二进制又被分为原码、反码、补码
请记住:任何整数都是以补码形式存放在计算机中的
正数的原码、反码、补码三者是相同的,因此正数也可以看成是以原码的形式存放在计算机中
原码、反码、补码转换规则
补码转换到原码
补码-1得到反码,反码进行符号位不变的“按位取反”得到原码