farseerfc.wordpress.com 导入

2.1   X86概述

所谓X86体系结构,是指以Intel 8086芯片为首的芯片所沿袭的CPU结构,一些文档中又被称作IA32体系结构。包括的芯片有但不限于:Intel 8086至 80486,奔腾(Pentium)系列处理器1至4,赛扬系列处理器,酷睿系列处理器,以及AMD的相应型号产品。X86体系结构在早期属于16位处理器,自80386之后扩展为32位处理器,所以一些文档中又把80386之后的32位处理器体系称作I386。自Pentium4后期,AMD的Athlon64开始,I386被进一步扩充为64位处理器,含有64位寻址能力的X86体系结构被称作X86-64或IA32-64。总之,市售的个人电脑用CPU,除苹果的Macintosh之外,全部采用X86体系结构芯片。

在X86早期,16位的寻址能力只支持64KB(2^16=64K)内存,这显然是不够的。Intel采用分段寻址的方法,用4位段位+16位偏移量,提供了总共1MB(2^20=1M)的寻址能力。所以在X86的16位编程中,有两种指针类型 …

farseerfc.wordpress.com 导入

1.2   逗号运算符(,)、逻辑运算符(&&,||)与运算符重载的陷阱

很多人甚至不知道逗号(,)也是个C++运算符。与语法上要求出现的逗号(比如分隔函数参数的逗号)不同的是,出现在表达式中的逗号运算符在语义上表示多个表达式操作的连续执行,类似于分隔多语句的分号。比如:

for(inti=0,j=9;i<10;++i,--j)std::cout<<i<<”+”<<j<<”=9\n”;

在这句语句中,出现了两个逗号,其中前者是语法上用来分隔声明的变量的,并非逗号运算符,而后者则是一个逗号运算符。根据C++标准,逗号运算符的执行顺序为从左到右依次执行,返回最后一个子表达式的结果。由于只有最后一个表达式返回结果,所以对于一个语义正常的逗号表达式而言,前几个子表达式必须具有副作用。同时,从语言的定义中也可以看出,逗号表达式对求值的顺序有严格要求 …

farseerfc.wordpress.com 导入

1.1   条件运算符(?:)

条件运算符(?:)是C++中唯一的三目运算符(trinary operator),用于在表达式中作条件判断,通常可以替换if语句,与Visual Basic中的iif函数、Excel中的if函数有同样的作用。语法形式如下:

condition ? true_value : false_value

其中condition *条件是任何可以转换为bool类型的表达式,包括但不仅限于**bool*int、指针。与ifwhile的条件部分稍显不同的是,这里不能定义变量,否则会导致语法错误。

另外,条件语句会切实地控制执行流程,而不仅仅是控制返回值。也就是说,两个返回值表达式中永远只有一个会被求值,在表达式的执行顺序很重要时,这点尤为值得注意。比如:

int *pi=getInt();

int i=pi …