C++(一)基础回顾

一.基本概念

<<:插入操作符

<<:提取操作符

源文件代码扩展名:.cpp或.cc

头文件代码扩展名:.h或.hpp

命名空间:大项目有很多程序员,可能会对不同的变量使用相同的变量名,命名空间用来区分不同的开发人员的命名空间,而C++标准库的命名空间是std(难怪每个程序都会有一个using namespace std;

STL(标准模板库)是标准库的子集,其包含大量类模板。

编译原理:编译器将cpp文件转换为对象文件,再由链接程序把所以对象文件和库函数等库文件整合起来生成可执行文件。

十六进制数:加0x或0X

负的二进制数怎么表示?设置符号位:

符号位是最左边的那一位。十进制数-8:使用负数的2的补码形式化成二进制数为:11111000

八进制:当计算机内存用36位字来衡量的时候八进制数很有用,可以把36位的二进制指定为12个八进制数字。不过这是很久以前的事情了。前导加0

Big-Endian(最重要的8位存储在地址最高位)和Little-Endian系统(最重要的8位存储在地址最低位)。

通用字符集UCS,代码32位,提供超20亿不同代码值。

Unicode:是一个标准,定义了一组字符和代码点(与UCS)相同,代码点值从0到0X10ffff。,提供多个编码方式,最常用的编码是UTF-8和UTF-16。

C++源字符是什么?三字符序列呢?

转义序列

运行如下程序:

#include “stdafx.h”
#include <iostream>
using namespace std;
int main()
{
cout << “\”Least\’said\’\\\n\t\tsoonest\’mended\’.\”” << endl;
system(“pause”);
return 0;
}

得到结果:”Least’said’\
soonest’mended’.”

思考!

二.基本数据类型

整数类型字节数:signed char(1)short/short int(2)int(4)long/long int(4)long long/long long int(8)

无符号整型加unsigned关键字,long类型后缀L,longlong则LL。组合的如UL,LU

整型字面量:整数的本身,十六进制的整型字面量用来描述RGB颜色,如0XFFFFFF表示白色。

size of运算符:得到某个字节数。

static_cast<>静态显式强制类型转换。

使用字符变量

wchar_t:一种基本类型

char16_t:UTF16编码

char32_t:UTF32编码

标准库里还提供了标准输入输出流wcin和wcout,来读写用于wchar_t类型的字符。

auto关键字:告诉编译器应该推断其类型。

lvalue和rvalue:b=++a(lvalue)b=a++(rvalue)

三.处理基本数据类型

运算符的优先级和相关性(结合性)

按位运算符,移位运算符(<<和>>)

注意:按位移动带符号的整数:向右移负整数的位,除去符号位,空出来的位补1,正整数补0。
按位反:~

按位与:&(常用于选择整数中特定的一个位或一组位)和关闭位/掩码

按位异或:^(用于图形编程,异或绘图)0xff0000

按位或:|(常用于选择整数中特定的多个位或一组位)

枚举类型:

enum class Day{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};Monday到Sunday值0-6

enum class Day{Monday=1,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};Monday到Sunday值1-7

enum class punctuation:char{Comma=’,’,Exclamation=’!’,Question=’?’};

 

size_t 类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版。它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。
例如:bitset的size操作返回bitset对象中二进制位中的个数,返回值类型是size_t。
例如:在用下标访问元素时,vector使用vector::size_type作为下标类型,而数组下标的正确类型则是size_t。vector使用的下标实际也是size_t,源码是typedef size_t size_type。

 

数据类型和字长问题:

机器字长:是指计算机进行一次整数运算所能处理的二进制数据的位数(整数运算即定点整数运算),平时所说的32位系统即每次处理4个字节,也有64位和16位的等分别每次处理8和2个字节。

算术类型的存储空间按照机器而定。一般,short类型为半个机器字长,int为一个机器字长,long为1或2个机器字长,float为一个机器字长,double为两个字,long double用3或4个字长。C++标准规定的是每个算术类型的最小存储空间,但其并不阻止编译器用更大的存储空间。如果要保证移植性,使用__int16 __int32 __int64。

 

数据类型名称 字节数 别名 取值范围
int * signed,signed int 操作系统决定,即与操作系统的"字长"有关
unsigned int * unsigned 由操作系统决定,即与操作系统的"字长"有关
__int8 1 char,signed char –128 到 127
__int16 2 short,short int,signed short int –32,768 到 32,767
__int32 4 signed,signed int –2,147,483,648 到 2,147,483,647
__int64 8 –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
bool 1 false 或 true
char 1 signed char –128 到 127
unsigned char 1 0 到 255
short 2 short int,signed short int –32,768 到 32,767
unsigned short 2 unsigned short int 0 到 65,535
long 4 long int,signed long int –2,147,483,648 到 2,147,483,647
long long 8 none (but equivalent to __int64) –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long 4 unsigned long int 0 到 4,294,967,295
enum * 由操作系统决定,即与操作系统的"字长"有关
float 4 3.4E +/- 38 (7 digits)
double 8 1.7E +/- 308 (15 digits)
long double 8 1.7E +/- 308 (15 digits)
wchar_t 2 __wchar_t 0 到 65,535

(P:指针的大小为定值4个字节)

(1)类型修饰符signed和unsigned用于修饰字符型和整形。

(2)类型修饰符short和long用于修饰字符型和整形。

(3)当用signed和unsigned、short和long修饰int整形时,int可省略。

(4)其中bool和wchar_t是C++特有的。

(5)除上表以外,C/C++都可以自定义枚举enum、联合union和struct结构体类型。

(6)以上sizeof通过Windows XP 32位平台测试,其中某些类型数据的字节数和数值范围由操作系统和编译平台决定。比如16位机上,sizeof(int) = 2,而32位机上sizeof(int) = 4;32位机上sizeof(long) = 4,而64位机上sizeof(long) = 8。除此之外,注意64位机上的pointer占8byte。

(7)void的字面意思是“无类型”,不能用来定义变量。void真正发挥的作用在于:<1> 对函数返回和函数参数的限定,例如自定义既不带参数也无返回值的函数voidMyFunc(void);<2>定义无类型通用指针void *,指向任何类型的数据。

(8)标准C++库及STL还提供了通用数据结构:字符串类string;向量类模板vector;双端队列类模板deque;链表类模板list;容器适配器堆栈类stack(实现先进后出的操作);容器适配器队列类queue(实现先进先出的操作);集合类set;多重集合类multiset;映射类map;多重映射类multimap;位集合bitset;迭代器iterator (类似指针的功能,对容器的内容进行访问)。

(9)在标准c++中,int的定义长度要依靠你的机器的字长,也就是说,如果你的机器是32位的,int的长度为32位,如果你的机器是64位的,那么int的标准长度就是64位,而vc中__int64是为在32机位机器长实现64位长度的整形数。

(10)关于32位平台下的int和long

long从字面上看,应该是64位才更合理,把long当成32位实在是一个历史的包袱。像C#那样新起炉灶的程序语言,由于没有需要支持老代码的问题,就把long当作64位来处理了。

在32位平台下,long是相对short而言,long(short)类型是long(short) int类型的简称,sizeof(long)= sizeof(int) = 4。int和long的范围虽然一样,但输入输出格式不同,printf int的格式为%d,而printf long的格式为%ld。

考虑到程序的可移植性,还是要将他们区分开来。但当要求的数值范围为4byte时,建议使用int类型,因为第一版的C语言只有一种类型,那就是int。

(11)在Win32API及MFC中为了使类型名称在语意上更明了,对以上基本类型进行了大量的typedef。例如WINDEF.H中的BYTE,WORD,DWORD。

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注