写个总结记录一下这些基础知识,个人感觉是一些较为常见的数据类型,并且补充了一些个人认为要注意的点和一些理解。
一、整型
- 数据范围
数据类型 | 别名 | 字节数(Byte) | 取值范围 |
---|---|---|---|
short | short int,signed short int | 2 (16bit) | –32,768 ~ 32,767 |
unsigned short | unsigned short int | 2 (16bit) | 0 ~ 65,535 |
int | signed int | * | 由操作系统决定,现常见为4字节 (32bit) 即-2,147,483,648 ~ 2,147,483,647 (10位数) |
unsigned int | unsigned | * | 由操作系统决定,现常见为4字节 (32bit) 即0 ~ 4,294,967,295 (10位数) |
long | long int,signed long int | 4 (32bit) | –2,147,483,648 ~ 2,147,483,647 (10位数) |
unsigned long | unsigned long int | 4 (32bit) | 0 到 4,294,967,295 (10位数) |
long long | * | 8 (64bit) | –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (19位数) |
__int8 | char,signed char | 1 (8bit) | –128 ~ 127 |
__int16 | short,short int,signed short int | 2 (16bit) | –32,768 ~ 32,767 |
__int32 | signed,signed int | 4 (32bit) | –2,147,483,648 ~ 2,147,483,647 (10位数) |
__int64 | * | 8 (64bit) | –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (19位数) |
Ps.
①关于在short、int、long前加上unsigned
实质是将符号位也用于表示数据,使得最大值扩大一倍,但只能表示正数(无符号)。
以short和unsigned short为例(均为2字节,即16位)
short | 1位符号位,15位数据位 | 数据范围为 -2^15 ~ 2^15-1 |
---|---|---|
unsigned shor | 无符号位,16位数据位 | 数据范围位:0 ~ 2^16-1 |
②关于__int8、__int16、__int32 和 __int64
2条下划线,数字代表占用内存位数
数据范围上等同于char、short、long 和 long long
- 输入、输出
- scanf() 和 printf()
数据类型 | 输入用格式字符 | 输出用格式字符 |
---|---|---|
short | %hd | %hd |
int | %d | %d |
unsigned int | %u | %u |
long | %ld | %ld |
long long | %lld 或 %I64d | %lld 或 %I64d |
__int64 | %I64d | %I64d |
Ps.
①重点注意long long 和 __int64,这两个都可以用来存储较大的数据,但上述的输入输出格式字符并不一定正确,具体和IDE有关,详见:https://blog.csdn.net/Thunders01/article/details/38879553
②在int为32位 (4字节) 的操作系统中,int和long,%d和%ld是完全等价的。
③应注意格式字符是将数据当作该格式进行输入输出,并不存在语法错误。
如果int类型变量里面存的数据不超过short类型的表示范围,是可以使用%hd输入输出的,但如果超过范围,会发生截断,导致数据丢失。
同理,可以使用%d来输入输出short类型数据。
-
cin和cout
根据数据类型自动输入输出,cin与scanf()一样以空格、tab或换行作为分隔符。
需要注意的是部分编译器cin,cout和__int64并不兼容。
应使用:
long long a; 或 __int64 a;
cin>>a; scanf(“%I64d”,&a);
cout<<a; printf(“%I64d”,&a);
二、浮点型
- 数据范围
数据类型 | 字节数(Byte) | 数据范围 |
---|---|---|
float | 4 (32bit) | 3.4E +/- 38 (7 digits) |
double | 8 (64bit) | 1.7E +/- 308 (15 digits) |
另外的对于long double,多见于12字节,但C至少保证long double与double精度相同。
- 输入、输出
- scanf() 和 printf()
数据类型 | 输入用格式字符 | 输出用格式字符 |
---|---|---|
float | %f | %f、%e、%E |
double | %lf | %f、%lf、%e、%E |
应特别注意,对于double类型读入是scanf("%lf",&a),输出用%f即可。
- cin和cout
根据数据类型自动输入输出。
三、其他数据类型
数据类型 | 字节数(Byte) | 取值范围 |
---|---|---|
char | 1 (8bit) | –128 ~ 127 |
bool | 1 (8bit) | true 或 false |
指针型 | 4 (32bit) | * |
size_t | 4 (32bit) 或 8 (64bit) | * |
Ps.
①指针型可以利用printf("%p",pointer)来打印该指针指向的地址。(十六进制格式)
②size_t是sizeof()的返回值类型,其实是保存了一个整数,所以它也可以做加减乘除,也可以转化为int并赋值给int类型的变量。
③char类型详见 这里
此外:表示整数、字符和布尔值的算术类型合称为整型(integral type)。
参考资料:https://blog.csdn.net/zhanggx123/article/details/79221157
https://www.cnblogs.com/ChenDinghao/p/6480937.html
https://blog.csdn.net/xuexiacm/article/details/8122267