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