处理数据
第3章处理数据:C++提供了内置类型来存储两种数据:整数(没有小数的数字)和浮点数(带小数的数字)。为满足程序员的各种需求,C++为每一种数据都提供了几个类型。本章将要讨论这些类型,包括创建变量和编写各种类型的常量。另外,还将讨论C++是 如何处理不同类型之间的隐式和显式转换的。
3.1 简单变量
3.1.1 变量名
在名称中只能使用字母字符、数字和下划线 ( _ );
名称的第一个字符不能是数字;
区分大写字符与小写字符;
不能将C++关键字用作名称;
以两个下划线 或 下划线+大写字母 打头的名称被保留给实现(编译器及其使用的资源)使用;
以 一个下划线 开头的名称被保留给实现,用作全局标识符;
C++对于名称的长度没有限制,名称中所有的字符都有意义,但有些平台有长度限制。
TODO
命名风格
3.1.2 整型
整数无限大,每一种 C++的整形只是数学上的整数的一部分。
3.1.3 short、int、long、long long
用 climits 来确定各种整形的最大最小值
赋值竟然可以这样:
int a = {}; // 这个就是 0,int b = {100}; // 就是 100
3.1.4 无符号类型
why:比如人口等,不需要负数,无符号类型可以扩展数的范围
3.1.5 如何选择具体的整型
原则:能省则省
3.1.6 整形字面量
3.1.7 常量
十
1234
1234L 或 1234l
1234LL 或 1234ll
八
01234
01234L 或 01234l
01234LL 或 01234ll
十六
0x1234
0x1234L 或 0x1234l
0x1234LL 或 0x1234ll
3.1.8 字符:ASCII(大小位 1 个字节)
转义字符
换行符(NL (LF))
NL(LF)
10
0xA
水平制表符(HT)
HT
9
0x9
垂直制表符(VT)
VT
\v
11
0xB
退格(BS)
BS
\b
8
0x8
回车(CR)
CR
13
0xD
振铃(BEL)
BEL
\a
7
0x7
反斜杠(\)
\
\\
92
0x5C
问号(?)
?
\?
63
0x3F
单引号(')
'
\'
39
0x27
双引号(")
"
\"
34
0x22
signed char 和 unsigned char
与 int 不同的是,char 在默认情况下既不是没有符号,也不是有符号。是否有符号由 C++实现决定, 这样编译器开发人员可以最大限度地将这种类型与硬件属性匹配起来。如果 char 有某种特定的行为对您来 说非常重要,则可以显式地将类型设置为 signed char 或 unsigned char
char a; // 可能是有符号,也有可能无符号
unsigned char b; // 一定丝滑无符号
signed char c; // 一定是无符号wcha_t(宽字符类型):用来表示比如日语,汉语这种 ASCII 表示不了的字符。
wchar_t bob = L'P';
wcout << L"tall" << endl;3.1.7 bool
true:true,非 0 的整数比如-1, 10
false:false,整数 0
3.2 const 限定符
通用模板如下
const 类型 名字 = value;const 比 define 好:可以限制类型,可以更精确的控制作用域
3.3 浮点数
3.3.1 书写浮点数
直接写小数点:12.34,8.0
科学计数法(E 和 e 都可以):2.52e+8,8.33E-3,3.3e2
3.3.2 浮点类型
cout.setf():用来重新定义输出的小数位数。floatfield 是 6,就是说保留六位小数。这个例子可以看出 float 和 double 的有效位的区别,float 只有 32-9=24bits 表示位数,也就是24/4=6 位有效数字。
3.3.3 浮点常量
1.234f // float const
2.45E20F // float const
2.345E28 // double const
2.2L // long double const3.3.4 浮点数的优缺点
3.4 C++算术运算符
3.4.1 运算符优先级和结合性
+,-,*,/,%取余数只能整数和整数运算
3.4.2 除法分支
3.4.3 求模运算符
3.4.4 类型转换
情况:赋值,表达式求值,函数传参
3.4.5 C++11 中的 auto 声明
使用关键字auto,而不指定变量的类型,编译器将把变量的类型设置成 与初始值相同(推断完就固定了,不能改了)
auto a = 1.0;
auto b = 3;其实 auto 更适合 STL,标准模块库
std::vector<double> scores;
// std::vector<double>::iterator pv = scoress.begin();
auto pv = scoress.begin();最后更新于
这有帮助吗?