数据类型名称 字节数 别名 取值范围
int * signed,signed int 由操作系统决定,即与操作系统的"字长"有关
unsigned int * unsigned 由操作系统决定,即与操作系统的"字长"有关
__int8 1 char,signed char –128 到 127
__int16 2 short,short int,signed short int –32,768 到 32,767
__int32 4 signed,signed int – 2,147,483,648 到 2,147,483,647
__int64 8 无 –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
bool 1 无 false 或 true
char 1 signed char –128 到 127
unsigned char 1 无 0 到 255
short 2 short int,signed short int –32,768 到 32,767
unsigned short 2 unsigned short int 0 到 65,535
long 4 long int,signed long int –2,147,483,648 到 2,147,483,647
long long 8 none (but equivalent to __int64) –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long 4 unsigned long int 0 到 4,294,967,295
enum * 无 由操作系统决定,即与操作系统的"字长"有关
float 4 无 3.4E +/- 38 (7 digits)
double 8 无 1.7E +/- 308 (15 digits)
long double 8 无 1.7E +/- 308 (15 digits)
wchar_t 2 __wchar_t 0 到 65,535
类型标识符 类型说明 长度
(字节) 范围 备注
char 字符型 1 -128 ~ 127 -2~ (2-1)
unsigned char 无符字符型 1 0 ~ 255 0 ~ (2-1)
short int 短整型 2 -32768 ~ 32767 2~ (2- 1)
unsigned short int 无符短整型 2 0 ~ 65535 0 ~ (2- 1)
int 整型 4 -2147483648 ~ 2147483647 -2~ (2- 1)
unsigned int 无符整型 4 0 ~ 4294967295 0 ~ (2-1)
float 实型(单精度) 4 1.18*10~ 3.40*10 7位有效位
double 实型(双精度) 8 2.23*10~ 1.79*10 15位有效位
long double 实型(长双精度) 10 3.37*10~ 1.18*10 19位有效位
四、数据类型:计算机描述对象的单位
基本数据类型:
数据类型种类: 32位系统所占字节数 64位系统所占字节数 format(格式控制符,C语言输入和输出是使用识别数据类型的符号)
字符类型: char(signed char) 1 %c/%hhd
无符号字符类型: unsigned char 1 %hhu
短整型: short(short int) 2 %hd --->h表示half(一半)
无符号短整型: unsigned short 2 %hu
整型: int 4 %d
无符号整型: unsigned int 4 %u
长整型: long 4 8 %ld
无符号长整型: unsigned long 4 8 %lu
长长整型: long long 8 %lld
无符号长长整型: unsigned long long 8 %llu
单精度浮点型: float 4 %f
双精度浮点型: double 8 %lf
布尔型: bool 1 %hhd
注意:
1、sizeof可以自动计算数据类型或变量所占字节数
32位系统:printf("%u\n", sizeof(a));
64位系统:printf("%lu\n", sizeof(a));
2、使用布尔类型要加头文件 #include <stdbool.h>
bool a = 1; <==>bool a = true;
bool a = 0; <==>bool a = false;
3、计算机存储的数据都是二进制数,如何存储字符,把每个字符都设置一个编号(ASCII码),如果要输出字符必须要用%c,输出%hhd, %hhu
总的字符的个数:128个字符
'A' == 65
'a' == 97
'0' == 48
4、指针内存大小:
32位系统占4个字节(无论是什么类型的指针在32位系统中都占4个直接,因为存储的是地址,64位也一样)
64位系统占8个字节(固定的)
5.一个数组的数据类型
int a[2][3] ={1, 2, 3, 4, 5, 6};
a :二维数组数组名,大数组的数组名,这个二维数组首元素地址,第一个小数组的地址
a+1 == a+1*sizeof(a[0]) == a+1*12
a -->类型为:int (*)[3]
&a : 二维数组的地址,也就是大数组的地址
&a+1 == &a+1*sizeof(a) == &a+1*24
&a -->类型为:int (*)[2][3]
a[0] :小数组数组名,小数组的首元素地址,a[0][0]是小数组的首元素,a[0] == &a[0][0]
a[0] 的类型:int *
a[0][0] 的类型是:int
&a[0][0]的类型是:int *
a[0]+1 == a[0]+1*sizeof(int) == a[0]+1*4
&a[0] : 小数组的地址
&a[0] -->类型为:int (*)[3]
&a[0]+1 == &a[0]+1*sizeof(a[0]) == a+1*12
a[0][0] : a[0][0]是小数组的首元素
a[0][0]-->类型为: int
&a[0][0]: &a[0][0]是小数组的首元素地址
&a[0][0]+1 == &a[0][0]+1*sizeof(int) == &a[0][0]+1*4
&a[0][0]-->类型为: int *
int a[3];
a ------>int //表示一维数组首元素地址,数组名就是首元素地址
a[0]----->int
&a ------>int (*)(int) //表示整个一维数组的地址
&a[0]---->int * //表示一维数组首元素地址
6.指针数组与数组指针区别
1.指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身 ( int *p1[10] )
决定。它是“储存指针的数组”的简称。
2.数组指针:首先它是一个指针,它指向一个数组。在 32 位系统下永远是占 4 个字节, ( int (*p2)[10] )
至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称
7. 1gb =1024mb
1mb =1024kb
1kb =1024字节
1字节 = 8bit