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};


三、整型##

整型只需要强调 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 类型。

你可能感兴趣的:(C++算术类型)