C++算术类型

Tags:C++,《C++ Primer Plus》笔记
一、分类## 见下图,注意以下几点:

  • char16_tchar32_t 是C++11新增的类型。
  • 随着编译器和系统的不同,整型和浮点数所占的位数可能会不同,下图中只记录了可能的最小位数,以作对比。
  • unsigned 版本能表示的数值是 signed 版本绝对值的两倍,他们就像表盘,一旦数值溢出,多余的部分将重新轮回计数。
  • 默认情况下,C++以 int 类型存储整数值,double 存储浮点数。
Ccaculate

二、声明与赋值##

声明###
C++中声明值有多种方法:
  • (unsigned) typeName variable (类型名 + 变量名)
    unsigned 为可选为无符号值时才显式加入。用于声明一个变量。
  • 整形字面量,通过类型前后缀声明创建一个常量:
#include int main() { using namespace std; cout << 42 << endl; //十进制int cout << 0x42 << endl; //八进制int cout << 042 << endl; //十六进制int cout << 1.492E3 << endl; //double cout << 1492UL << endl; //unsigned long 1492 cout << 1.492F << endl; //float }

用后缀时,好的编程习惯要求全部大写。

  • const (unsigned) typeName variable
    加上 const 操作符,显式声明并立刻赋值一个不可更改的常量,不可只声明不赋值。


赋值###
C++中赋值算术类型有两种方法:
  • 使用 = 赋值运算符:int a = 123;
  • 使用列表赋值法:int a {123};
【C++算术类型】

三、整型## 整型只需要强调 char 类型。
  • 用单引号 '' 包括的内容为 char 字面值,它等于引号内容所对应的字符集编码。
  • wcha_t 宽字符类型用于处理较大位的字符集,它将定义为尽可能宽,用 L 前缀标识:wchar_t bob = L'p';
  • char16_tchar32_t 分别为16位和32位的字符类型,分别用 uU 标识:char16_t ch1 = u'q'; char32_t ch2 = U'\U0000222B';


四、浮点数## 浮点数有两种书写方式:
  • 使用常用的标准小数点表示法。
  • E表示法,即科学计数法。
当数值溢出时,将自动转换为E表示法,由于float 只保证6位有效,因此通常该情况发生于 float


五、类型转换(重点)##

1. 初始化赋值转换#### 在用赋值运算符 = 或列表赋值法 {} 时,所给 value 值将被转化为指定的 type 类型。注意 {} 不支持缩窄转换,否则将报错。


2. 表达式中的转换#### 整型计算时,小于 int 类型的值将全部转化为 int 值进行计算,大于的类型保留。这被称为整型提升。
其他情况时,遵照优先级进行转化:
long double > double > float > long long > long > int > 较高级无符号 > (可容纳)较低级无符号 > 同级无符号 > 相同类型不转换
后者类型将转换为前者类型,优先转化前面的比较(类型比符号优先)。


3. 参数传递转化#### 没有控制参数类型的函数,按照默认(整型 int,浮点数 float)情况进行转化。


4. 强制类型转化(待添加)#### C++共5种,这里先记录两种
  • (typeName) value(C风格)或 typeName (value),将 value 强行转化为 typeName 类型。
  • static_cast (value),将 value 强行转化为 typeName 类型。

    推荐阅读