您的位置:首页 > 编程语言 > C语言/C++

C++回炉之_C++PrimerPlus_第三章 处理数据

2018-03-04 17:24 387 查看

变量命名

只能使用 字符字母 数字 下划线(_)

第一个字符不能为数字

不能将C++关键字作为名称

区分大小写

以两个下划线或下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用

以一个下划线打头的名称被保留给实现,用作全局标识符

对名称长度无限制, 但C99的限制是63个字符

整型

short 至少16位

int 至少和short一样长

long 至少32位, 且至少和int 一样长

long long 至少64位, 且至少和long一样长

使用 < climits > 获得整形的限制信息

最值

SHRT_MAX SHRT_MIN

INT_MAX INT_MIN

LONG_MAX LONG_MIN

LLONG_MAX LLONG_MIN

字节数 – sizeof(int);

对变量名使用sizeof时, 可不用括号 – sizeof a;

字节位数 – CHAR_BIT

无符号类型 – 使用unsigned关键字即可

unsigned int a = 10;

选择

int 最自然 – 处理效率最高

short 节省内存 – 大型数组

long 可移植性高

char 只有一个字节时用

整型的字面值

十进制(decimal) – int a = 23; cout << dec << a << endl;

八进制(hexadecimal) – int b = 046; cout << hex << b << endl;

十六进制(octal) – int c = 0xAF; cout << oct << c << endl;

整型后缀

L uL uLL 长整型 无符号长整型 无符号long long

char类型 – 字符和小整数

#include <iostream>
using namespace std;

int main() {
char ch = 'M';
int i = ch;
cout << ch << " - " << i << endl;
cout.put(ch); cout.put('!');        // 不带回车
return 0;
}


输出结果

M - 77

M!

char 默认为 unsigned char[0,,255] 但也可显示声明为 signed char[-128, 127] – 单字节

转义序列

换行 \n

回车 \r

水平制表 \t

垂直制表 \v

退格 \b

响铃 \a

问号 \?

反斜线 \

单引号 \’

双引号 \”

通用字符名 – ISO 10646 和 Unicode

\u + 8个十六进制位 – \u006E

\U + 16个十六进制位

cout << “k\u00E2rper” << endl; – k芒rper

wchar_t 宽字符类型 – 双字节

wchar_t wch = L ‘P’ ; // 使用前缀L表示

wcout << L “hello” << endl; // 使用wcout和wcin代替cout和cin

char16_t 和 char32_t – C++11新增

char16_t ch1 = u’\u00F6’; // 无符号 16位

char32_t ch2 = U’\U0000222B’; // 无符号 32位

bool类型

bool flag = true; // 任何非零值

bool ok = false; // 零值

const限定符 – 定义常量

const type name = value;
const int maxn = 1004;


const相对于#define 的优点

明确指定类型

可限制在特定的作用域(函数或文件)内 – #define 为全局作用域

可将const 用作更复杂的类型(数组或结构体)

可用const 值声明数组长度

浮点数

书写

标准小数点表示法

0.023

8.0

E表示法

3.45E8

2.52e+5

8.33E-4

7E5

-18.34e24

有效位

float 至少32位

double 至少48位 且不少于float

long double 至少和double一样

指数范围到少是[-37, 37] – 可在 < cfloat > 头文件中查看

#include <iostream>
using namespace std;

int main() {
float a = 10.0 / 3.0;
double b = 10.0 / 3.0;
const float c = 1.0e6;

cout.setf(ios_base::fixed, ios_base::floatfield);   // 使用定点表示法输出
cout << "a = " << a << endl;
cout << "b = " << b << endl;

cout << "a*c = " << a*c << endl;                    // 精度不一样
cout << "b*c = " << b*c << endl;

cout << "a*c*10 = " << a*c*10 << endl;              //结果不正确
return 0;
}


输出结果

a = 3.333333

b = 3.333333

a*c = 3333333.250000

b*c = 3333333.333333

a*c*10 = 33333332.000000

浮点后缀

float – f/F后缀 – 1.234f 1.234F

double – 默认类型 无后缀

long double – l/L后缀 – 1.234L

算术运算符

基本运算符

+ 加法

-\ 减法

* 乘法

/ 除法 两个操作数都是整数时结果才为整数

% 求模 两个操作数必须是整数

优先级

先乘除(取模) 后加减

可用括号控制优先级

可在网上搜索C++运算符优先级表

结合性

两个优先级相同的运算符被同时用于一个操作数时,需要考虑是左结合还是右结合

120/4*5 = 150 – 从左往右计算 左结合

类型转换

自动类型转换

大范围转小范围(long->int 或 float -> int等) 会丢失精度

初始化时或将一种类型赋值给另一种类型时

表达式中包含不同类型时 – 整形提升 小->大

参数传递给函数时

以{}初始化(列表初始化)时,不允许缩窄(float->int) (C++11)

强制类型转换

(typename)value // C语言格式

typename(value) // C++格式 – 像函数调用一样

static_cast < typename > (value) – 更严格的转换(第十五章详解)

auto初探 – C十十11的福利

自动推断类型

使用STL时方便

vector<int> x;
vector<int>::iterator it = x.begin();


可简化为

vector<int> x;
auto it = x.begin();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: