跳至正文
View Categories

2 min read

主要内容 #

1. 整型 #

1.1 不同大小的整型 #

什么是 shortlonglong 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”表示

有符号shortintlonglong long
无符号unsigned shortunsigned intunsigned longunsigned long long

1.4 不同整型的表示范围 #

在不同的机器上,不同类型的“表示范围”会有差异。下表,以传统的 32 位操作系统为例,列出它们的差异。

类型名称shortintlonglong longunsigned shortunsigned intunsigned longunsigned long long
所占字节数24482448
表示范围-32768~32767-2147483648~
2147483647
-2147483648~
2147483647
-9223372036854775808~
9223372036854775807
0~655350~
4294967295
0~
4294967295
0~
18446744073709551615

2. 实型 #

1.1 不同大小的实型 #

什么是 floatdouble

和整型一样,floatdouble 是不同存储大小的实型类型。

它们的大小关系为: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 不同整型的表示范围 #

类型名称floatdoublelong doublebool
所占字节数48161(8 位)
表示范围-3.4E+38~3.4E+38-1.7E+308~1.7E+308-3.4E4932~3.4E4932true / false

3. 小结 #

1.1 整型 #

类型名称shortintlonglong longunsigned shortunsigned intunsigned longunsigned long long
所占字节数24482448
表示范围-32768~32767-2147483648~
2147483647
-2147483648~
2147483647
-9223372036854775808~
9223372036854775807
0~655350~
4294967295
0~
4294967295
0~
18446744073709551615

1.2 实型 #

类型名称float(中文翻译:单精度)double(中文翻译:双精度)long doublebool
所占字节数48161(8 位)
表示范围-3.4E+38~3.4E+38-1.7E+308~1.7E+308-3.4E4932~3.4E4932true / false

1.3 字符型 #

* 字符型还未介绍,将在后续章节讲解。

类型名称charunsigned char
所占字节数11
表示范围-128~1270~255

习题 #

课后练习