主要内容 #
1. 整型 #
1.1 不同大小的整型 #
什么是 short,long 和 long long ?
原来他们是不同大小的“碗”!
在计算机中,每一个数值,都占据一定大小的存储空间。
一般来说,越大的值,需要的存储空间越大,如上图所示。
那么,对于不同大小的数值,则需要不同大小的变量(碗),来存储他们。
整型中,几个不同子类型的大小关系如下:
short <= int <= long <= long long
大家一定注意到了,这里的关系,给的是“小于等于”号。原因是,这几个类型的大小,会随着操作系统的不同,而有一定的差异。我们在后面的课程,会详细的说明。
1.2 变量的基本操作 #
请看示例程序:
#include < iostream > // 使用头文件 int main() { /* * 下面的类型大小,以 32 位操作系统为例说明,long 和 int 大小相同。 * 如果在 64 位操作系统上,则 long 和 long long 大小相同。 */ short dashima_sho; // 声明一个 short 变量 int dashima_int; // 声明一个 int 变量 long dashima_lon; // 声明一个 long 变量 long long dashima_ll ; // 声明一个 long long 变量 dashima_sho = 32767; // 赋值,short 类型的上限,是 32767 dashima_int = 32768; // 赋值,int 类型的上限,是 2147483647 dashima_lon = 2147483647; // 赋值,long 类型的上限,是 2147483647 dashima_ll = 2147483648; // 赋值,long long 类型的上限,是 9223372036854775807 std::cout << "short value = " << dashima_sho << std::endl; std::cout << "int value = " << dashima_int << std::endl; std::cout << "long value = " << dashima_lon << std::endl; std::cout << "long long value = " << dashima_ll << std::endl; return 0; }
1.3 有符号/无符号的整型 #
如数学上,整型还有“有符号/无符号”的差别。
- 有符号 – 代表有正有负,比如“温度”
- 无符号 – 代表非负数,比如“容量”
- 有符号和无符号的整型,拥有相同的大小,但是它们表示的范围不同,如红色区域所示。
C++中,无符号需要特别声明,用 “unsigned”表示。
有符号 | short | int | long | long long |
无符号 | unsigned short | unsigned int | unsigned long | unsigned long long |
1.4 不同整型的表示范围 #
在不同的机器上,不同类型的“表示范围”会有差异。下表,以传统的 32 位操作系统为例,列出它们的差异。
类型名称 | short | int | long | long long | unsigned short | unsigned int | unsigned long | unsigned long long |
所占字节数 | 2 | 4 | 4 | 8 | 2 | 4 | 4 | 8 |
表示范围 | -32768~32767 | -2147483648~ 2147483647 | -2147483648~ 2147483647 | -9223372036854775808~ 9223372036854775807 | 0~65535 | 0~ 4294967295 | 0~ 4294967295 | 0~ 18446744073709551615 |
2. 实型 #
1.1 不同大小的实型 #
什么是 float 和 double ?
和整型一样,float 和 double 是不同存储大小的实型类型。
它们的大小关系为:float < double
1.2 变量的基本操作 #
请看示例程序:
#include < iostream > // 使用头文件 int main() { float dashima_float; // 声明一个 float 变量 double dashima_double; // 声明一个 double 变量 dashima_float = 18.6f; // 赋值,float,f 表示这是 float 类型的数。小数数值,默认是 double 类型的。 dashima_double = 56.5; // 赋值,double dashima_float = -18.6f; // 赋值,float ,可以是负数 dashima_double = -56.5; // 赋值,double,可以是负数 std::cout << "float value = " << dashima_float << std::endl; std::cout << "double value = " << dashima_double << std::endl; return 0; }
注意:
- 实型,都是有符号的。不存在 unsigned float 这样的写法。
1.3 不同整型的表示范围 #
类型名称 | float | double | long double | bool |
所占字节数 | 4 | 8 | 16 | 1(8 位) |
表示范围 | -3.4E+38~3.4E+38 | -1.7E+308~1.7E+308 | -3.4E4932~3.4E4932 | true / false |
3. 小结 #
1.1 整型 #
类型名称 | short | int | long | long long | unsigned short | unsigned int | unsigned long | unsigned long long |
所占字节数 | 2 | 4 | 4 | 8 | 2 | 4 | 4 | 8 |
表示范围 | -32768~32767 | -2147483648~ 2147483647 | -2147483648~ 2147483647 | -9223372036854775808~ 9223372036854775807 | 0~65535 | 0~ 4294967295 | 0~ 4294967295 | 0~ 18446744073709551615 |
1.2 实型 #
类型名称 | float(中文翻译:单精度) | double(中文翻译:双精度) | long double | bool |
所占字节数 | 4 | 8 | 16 | 1(8 位) |
表示范围 | -3.4E+38~3.4E+38 | -1.7E+308~1.7E+308 | -3.4E4932~3.4E4932 | true / false |
1.3 字符型 #
* 字符型还未介绍,将在后续章节讲解。
类型名称 | char | unsigned char |
所占字节数 | 1 | 1 |
表示范围 | -128~127 | 0~255 |