添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

1. C++数据类型:整型,bool,char和浮点型

1.1. 整型

C++内置的整型 —— unsigned long, long, unsigned int, int, unsigned short, short, char, unsigned char, signed char, bool 和 unsigned long long, long long (C++ 11新增)

1.1.1. 整型short, int, long 和 long long

计算机内存由一些叫做位(bit)的单元组成,C++的short, int, long和long long分别用 不同数目的位 来储存值,最多能够表示4种不同的整数宽度。

如果在所有的系统中, 每种类型的宽度都相同 ,则使用起来十分方便。例如,short总是16位,int总是32位, 但生活并非那么简单 ,C++提供了另一种灵活的标准:

  • short 至少16位(2 bytes.)
  • int 至少与short一样长(4 bytes.)
  • long 至少32位,且至少与int一样长 (8 bytes.)
  • long long 至少64位,且至少与long一样长 (8 bytes.)
  • 1.1.2. 无符号类型 unsigned

    unsigned 是unsigned int的缩写

    如果short表示的范围为-32768到+32767,则无符号版本的表示范围为0-65535,当然,仅当数值不会为负时才应使用无符号类型,如人口等。

    1
    2
    3
    4
    5
    unsigned short change;
    unsigned int rovert;
    unsigned rovertt; // also unsigned int
    unsigned long gone;
    unsigned long long lang_lang;

    1.1.3. 整数字面型(进制问题)

    C++ 使用前一(两)位来标识数字常量的基数。

  • 如果 第一位为1 —— 9 基数为10(十进制)
  • 如果 第一位是0,第二位为1——7 ,则 基数为8(八进制)
  • 如果 前两位为0x或0X ,则 基数为16(十六进制)
  • pseudo code如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int chest = 42;     // decimal integer literal 十进制
    int waist = 0x42; // hexadecimal integer literal 十六进制
    int inseam = 042; // octal interger literal 八进制

    // 在cout输出下:

    chest = 42 (42 in decimal)
    waist = 66 (0x42 in hex)
    inseam = 34 (042 in octal)

    1.1.4. char类型:字符和小整数

    char类型 是专门为储存字符(如字母和数字)而设计的。char类型也是一种整型,它足够长,能够表示目标计算机系统中的所有基本符号——字母,数字和标点符号等。char最常被用来处理字符,但也可以将它比作比short更小的整型。

    最常用的符号集为ASCII字符集。
    例如字符A的编码为65,字母M的编码为77等。

    cin输入时,cin将键盘中输入的M转换为77;输出时,cout将77转换为所显示的字符M;cin和cout的行为都是由变量类型(ch)引导的。

    C++对字符用单引号 'M' 对字符串用双引号。

    cout.put() 为成员函数,提供了一个显示字符的方法,可以代替 cout <<

    ⚠️ 注意是字符而非字符串

    亲测

    1
    2
    3
    cout.put('M'); // valid
    cout.put('My'); // non valid
    cout.put("My bag"); // non valid

    1.1.5. C++转义序列的编码

    C++代码

    1.1.6. bool 类型

    bool布尔变量的值可以是true或false
    例如:

    1
    bool is_ready = true;

    1.2. const 限定符

    如果程序在多个地方使用相同的一个 常量 时,可用 const 来修改变量声明和初始化。
    例如,表示一年中月份的符号常量:

    1
    const int Months = 12;

    常量Months 被初始化后,其值就被固定了,编译器将不允许再修改该常量的值。

    一种常见的做法是 常量的首字母大写 Months ,有助于区分 常量 变量 。另外一种做法是 以字母k打头 kmonths

    1.3. 浮点数

    C++有3种浮点类型:float,double和long double。

    浮点数能够表示带小数部分的数字,诸如2.5,3.14159,122442.32这样的数字。

    计算机 将这样的值分成两部分存储。 一部分表示值,另一部分用于对值进行放大或缩小。

    打个比方,对于数字34.1245和34124.5,他们除了小数点位置不同,其他事相同的。

    可以把第一个数表示为0.341245(基准值)和100(缩放因子);第二个数0.341245(基准值)和10000(缩放因子)。

    缩放因子 的作用是移动小数点的位置,术语 浮点 也因此得名。

    C++ 内部表示浮点数的方法与此相同,只不过它基于的是二进制数,因此缩放因子是2的幂,不是10的幂。

    1.3.1. 浮点数的表示法

    • 第一种 是使用常用的标准小数点表示法:
    • 1
      2
      3
      12.34
      0.00023
      8.0 // 保证了是float而非int
    • 第二种 是使用E表示法
      其外观类似3.45E6,意思是3.45与1000000相乘的结果;E6指的是10的6次方。
      E表示法确定数字以浮点格式存储,即使没有小数点。
    • 1
      2
      3
      2.52e+8 // valid
      8.33E5 // valid
      8.33E-4 // valid, exponent can be negative

      1.3.2. 浮点的类型float,double和long double

      浮点数的三种类型是按 它们可以表示的有效数位和允许的指数最小范围 来描述的。

      有效位(significant figure) 是指数字中有意义的位,

      🍑 例如:

      某山脉额高度位14179英尺,该数字使用了5个有效位。

      然而,将其高度写成约14000英尺时,其有效数位为2。因为结果进行了四舍五入精确到了千位。这种情况下,其余的3位仅仅为占位符。

      有效数位不依赖于小数点的位置。

      例如,可以将山脉高度写为14.162千英尺,这样仍然是5个有效位。

      C++对于有效位数的要求是:

    • float 至少32位
    • double至少48位,且不少月float
    • long double至少和double一样多
    • float为32位
    • double为64位
    • long double为80,96或128位
    • 书本p48页提供了一个例子说明了double比float提供的精度更高。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      int main()
      {
      using namespace std;
      cout.setf(ios_base::fixed, ios_base::floatfield); // fixed-point
      float tub = 10.0 / 3.0; // good to about 6 places
      double mint = 10.0 / 3.0; // good to about 15 places
      const float million = 1.0e6;

      cout << "tub = " << tub;
      cout << ", a million tubs = " << million * tub;
      cout << ",\nand ten million tubs = ";
      cout << 10 * million * tub << endl;

      cout << "mint = " << mint << " and a million mints = ";
      cout << million * mint << endl;
      // cin.get();
      return 0;
      }

      1.3.2.1. 浮点常量

      在程序中书写副电厂粮食,像8.24或2.4E8这样的浮点都属于double类型。

      如果你希望常量为float类型,请使用f或F后缀。

      如果你希望常量为long double类型,可使用l或L后缀(由于l看起来很像数字1,因此L位更好的选择)

      1
      2
      3
      1.234f // a float constsant
      2.3423 // a double constant
      2.2L // a long double constant

      1.3.2.2. 浮点和整数的对比