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