C++ Primer第五版学习笔记八 基本内置类型,类型转换,转义字符,字面值前后缀

#include <iostream>

int main()
{
    bool b;              // 布尔类型       最小尺寸:未定义
    char c;              // 字符          最小尺寸:8位
    unsigned char uc;
    wchar_t wc;          // 宽字符        最小尺寸:16位
    char16_t c16t;       // Unicode字符   最小尺寸:16位
    char32_t c32t;       // Unicode字符   最小尺寸:32位
    short s;             // 短整型        最小尺寸:16位
    unsigned short us;   // 无符号短整型
    int i;               // 整型          最小尺寸:16位
    unsigned int ui;
    long l;              // 长整型        最小尺寸:32位
    unsigned long ul;
    long long ll;        // 长整型        最小尺寸:64位
    unsigned long long ull;
    float f;             // 单精度浮点数   6位有效数字
    double d;            // 双精度浮点数   10位有效数字
    long double ld;      // 扩展精度浮点数  10位有效数字

    // 选择类型的一些经验准则:
    // 当明确知晓数值不可能为负时,选用无符号类型
    // 如果整数值范围超过了int型,选用long long
    // 在算数表达式中不要使用char或者bool
    // 浮点数运算选用double

    // 类型所能表示的范围决定了转换过程
    bool testb = 42;
    std::cout << testb << std::endl;  // testb=1
    int testi = testb;
    std::cout << testi << std::endl;  // testi=1
    testi = 3.14;
    std::cout << testi << std::endl;  // testi=3,取整数位
    double testd = testi;
    std::cout << testd << std::endl;  // testd=3.0
    unsigned char testuc = -1;
    std::cout << testuc << std::endl; // 负数赋给无符号变量
    signed char testsc = 256;
    std::cout << testsc << std::endl;  // 超位,testsc的值未定义

    // 含有无符号类型的表达式
    unsigned u = 10;
    int testi1 = -42;
    std::cout << testi1 + testi1 << std::endl;
    std::cout << u + testi1 << std::endl; // 先把testi1转换为无符号数,然后参与运算

    unsigned u1 = 42 , u2 = 10;
    std::cout << u1 - u2 << std::endl;
    std::cout << u2 -u1 << std::endl;

    // 切勿混用带符号类型和无符号类型

    // 整数可以是十进制,八进制,16进制
    int i2 = 20;
    std::cout << i2 << std::endl;
    i2 = 024; // 八进制
    std::cout << i2 << std::endl;
    i2 = 0x14; // 十六进制
    std::cout << i2 << std::endl;

    // 转义字符
    // \n 换行符
    // \t 横向制表符
    // \a 响铃
    // \v 纵向制表符
    // \b 退格符
    // \" 双引号
    // \\ 反斜线
    // \? 问号
    // \' 单引号
    // \r 回车符
    // \f 进纸符

    // 字面值前缀
    std::cout << u'a' << std::endl;
    // u Unicode16字符  char16_t类型
    std::cout << U'a' << std::endl;
    // U Unicode16字符  char32_t类型
    std::cout << L'a' << std::endl;
    // L 宽字符  wchar_t类型
    std::cout << u8"test str" << std::endl;
    // u8 UTF-8  仅限于字符串字面常量

    // 整型字面值后缀
    std::cout << 45u << std::endl;
    std::cout << 46U << std::endl;
    // u或U unsigned类型
    std::cout << 47l << std::endl;
    std::cout << 48L << std::endl;
    // l或L long类型
    std::cout << 50ll << std::endl;
    std::cout << 51LL << std::endl;
    // ll或LL long long类型

    // 浮点型字面值
    std::cout << 13.14f << std::endl;
    std::cout << 13.15F << std::endl;
    // f或F float类型
    std::cout << 14.15l << std::endl;
    std::cout << 14.16L << std::endl;
    // l或L long double类型

    return 0;
}

 

posted @ 2018-05-28 07:27  云里飞  阅读(167)  评论(0编辑  收藏  举报