wchar_t
程序需要处理的字符集可能无法用一个8位的字节表示,比如日文、汉字等
此时有两种处理方法:
- 编译器厂商将char定义16位的字节或者更长
- char表示8位的字节,另一种
wchar_t
表示宽字符类型,可以扩展字符集
wchar_t
类型是一种整数类型,因此可以有足够的空间表示系统使用的最大扩展字符集。
iostream
使用wcin
和wcout
表示宽字符的输入输出。
C++11新增的char16_t
和char32_t
Unicode
提供了一种表示各种字符集的解决方案。ASCII码是Unicode的子集。Unicode
给每个字符指定一个编号 – 码点
码点通常类似:U-222B
(其中U表示这是一个Unicode字符,222B表示该字符的16进制编号)
另一种针对多语言文本的编码标准是ISO 10646
char16_t
使用前缀u
表示字符常量或者字符串常量;
char32_t
使用前缀U
表示字符常量或者字符串常量;
例如:
1 | char16_t = u'q'; |
bool布尔类型
C++将
非零值
解释为true
,0
是false
此处bool
表示真和假
如果需要打印这个类型的值,可以直接使用%d
打印判断是否为0
1 | bool is_ready = false; |
常量的符号名称 – const限定符
符号名称指出了常量表示的内容(即使用符号来表示一个常量)
符号常量的两种定义方式:
#define A 10
(预处理处理)const int B = 10;
(C++编译器处理,提供类型检查和作用域检查)
例如:
const int Months = 12; //首字母大写或者全部大写,表示常量(非通用约定)
常量Months
被初始化后,其值就被固定了,编译器不允许修改这个常量的值。
如果强制修改,g++将指出程序试图给一个只读变量赋值。
关键词const
叫做限定符,因为它限定了声明的含义。
创建常量
如果在声明中没有提供具体值,则常量的值是不确定的,且无法修改。
1 | const int pink = 10; //建议在声明中对常量初始化 |
const和define比较
const相比#define定义常量来说, 优势:
- 能够明确指定类型
- 可以使用C++的作用域规则将其定义限制在特定的函数或者类文件中
- 可以用于复杂的类型,例如数组、结构
浮点数
书写方式
- 常用的小数点表示法
1 | 12.34 |
- E表示法
例如
23.3E3
表示23.3的三次方。E
可以形容很大或者很小的数。E
后面是负数,表示除以N*10
d.ddE+n
表示小数点向右移动n位d.ddE-n
表示小数点向左移动n位
之所以称为浮点数
,就是因为小数点的移动
1 | 4E3 |
浮点类型float,double,long double
这三个类型是按他们可以表示的
有效数位
和允许的指数最小范围来描述的。有效位
表示数字当中有效的位数。比如14000
的有效位数是2,因为可以精确到千位,其余三位只不过是占位符。
有效位数不依赖小数点的位置。比如12.23
的有效位数是4。C++和C对
float
的有效位数至少32位。double
至少48位,且不少于float。long double
至少和double
一样多。
可以从头文件cfloat
和float.h
找到系统的限制!
1 |
|
g++ floatnum.cpp
编译
生成a.out
执行./a.out
运行结果:
1 | float tub = 3.333333 |
说明:
cout
会将3333333.250000
直接打印成3333333.25
,而cout.setf
将覆盖这种行为;cout
打印6位小数,他是iostream
的一个类成员函数,能够精确的控制输出格式、字段宽度、小数位数、采用小数格式还是E格式显示;