长度或尺寸

在内存中,数据非 0 即 1 ,可被寻址的最小内存块称为字节,即以字节来寻址。
而存储的基本单元则称为字,通常由几个字节组成。

  • 字符型

    算术类型: 即该类型数据所占用的位数,然而在不同机器上却有所差别
    算术类型: 分为 整形(字符型、布尔型)、浮点型


    char 占用一个字节(8 位)
    wchar_t 占用 2 个字节 (16 位)
    char16_t 占用 2 个字节(16 位)
    char_32_t 占用 4 个字节(32 位)

    其中 chat16_t chat32_t Unicode 字符集类型
    wchat_t 用于确保可以存储机器最大扩展字符集中的任意字符

  • 整数型

    c++ 标准规定


    int 至少和 short 一样大 (即 int 最小只能是 占用两个字节)
    long 至少和 int 一样大 (即 long 最小只能是 int 的尺寸 4 字节)
    long long 至少和 long 一样大

  • 浮点型

    分为 单精度 和 双精度
    通常:


    float 以一个字(32字节)来表示一个数,7 个有效位
    double 以两个字 (64字节) 来表示一个数,16 个有效位
    long double 以 四个字 (96/128字节) 来表示一个数 , 一般用于特殊需求,视硬件实现精度不同位数不同

修饰类型

  • 带符号 (signed) 和无符号 (unsigned)


    带符号的类型可表示正数、负数 和 0, 无符号类型则仅能表示大于等于 0 的直
    所有整形一般被默认为带符号的类型
    而由 unsigned 修饰的类型则为无符号类型


    字符型被分为三种:char、signed char、unsigned char
    但字符的表现形式只有两种方式,即 带符号字符、和 无符号字符
    而 char 不是带符号类型 就是无符号类型, 具体由编译器决定

  • 字面值常量


    以 0 开头的整数表示为 8 进制
    以 0x 或 0X 开头的整数表示为 16 进制
    整数则直接表示


    默认情况下


    十进制字面值是代符号数,其类型是 int、long、和 long long 中最小的那个
    八进制和十六进制字面值的类型是能容纳其数值的 int 、unsigned int、long、unsigned long
    long long、unsigned long long 中最小的那个
    short 没有对应的字面值

    字面值带前缀


    L 代表类型为宽字符型(wchat_t) 字面值
    u8 代表类型为 utf-8 (utf-8 用 8 位编码一个 unicode 字符)字面值
    u 代表类型为 char16_t (用 16 位编码一个 unicode 字符)字面值
    U 代表类型为 char32_t (用 32 位编码一个 unicode 字符)字面值

    字面值带后缀


    u / U 代表类型为无符号类型(unsigned)
    l / L 代表类型为长整型类型(long/long double)
    ll / LL 代表类型为长长型类型(long long)
    f / F 代表类型为浮点型类型(float)

    其他


    true / false 是 bool 类型的字面值
    nullptr 是 c++ 指针字面值
    NULL 是 c 指针字面值

  • 类型选择


    1 当明确知道数值不可能为 负时,选用无符号类型
    2 一般使用 int 来执行整数运算,如果数值超过该类型表示范围可选用 long long
    通常,short 显得太小,而 long == int
    3 算术表达式中不要使用 char 和 bool,只有在存放字符或布尔值时才使用它们
    因 chat 在不同机器上不是符号就是无符号,如果因为需要的数值不大而使用char,
    则因明确指定为 signed 或 unsigned
    4 执行浮点数运算时选用 double, 因为 float 通常精度不够,而双精度和单精度计算代价差别不大,
    有些机器上甚至要快于单精度,而 long double 一般别用,其运行的消耗也不容忽视。

  • 类型转换

    类型所能代表的值的范围决定了转换的过程


    1 当把一个非 bool 类型的值赋予 bool 类型变量时,当该值为 0 时 false ,否则为 true
    2 当把一个 bool 值赋予 非 bool 类型的变量时,该值为 false 时为 0, 否则为 1
    3 当把一个浮点数赋予整数类型时,进行了近视处理,其结果只保留小数点之前的部分
    4 当把一个整数值赋予浮点类型时,小数部分被记为0, 如果该整数所占空间超过了浮点型的容量,精度可能有损失
    5 当赋予无符号类型一个超出表示范围的数值时, 结果是原值对无符号类型可表示的最大值进行取模后的余数
    6 当赋予带符号类型一个超出表示范围的数值时,结果时未定以的
    程序可能继续工作,可能崩溃,也可能生成垃圾数据

  • 转义序列
    有两类字符程序员不能直接使用

    1 不可打印的字符!如退格或其他没有可视的图符
    2 特殊含义的字符!如单引号、双引号、问号、反斜杠等
    可以有两种方式来完成以上这些字符

    1 转义序列,如 \n ,而 \tHi!! 则输出制表符和 Hi!!
    2 泛化转义序列,\ 后跟一个或多个十六进制或八进制值,如 \12 则是换行符,
    而 \x1234 则是16进制数对应的符号

本文永久连接: http://www.guib.in