欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C Primer Plus 第五章——运算符、表达式和语句

程序员文章站 2023-12-22 21:35:46
...

符号=被称为赋值运算符(assignment operator) 。赋值运算符的动作是从右到左(结合性从右到左)。

”数据对象“(data object)是泛指数据存储区的术语,数据存储区能用于保存值。例如,用于保存变量或数组的数据存储区是一个数据对象。C的术语左值(lvalue)指用于标识一个特定的数据对象的名字或表达式。例如,变量的名字是一个左值。所以对象指的是实际的数据存储,但是左值是用于识别或定位那个存储的标识符。

因为不是所有的对象都是可更改值的,所以C使用术语”可修改的左值“来表示那些可以被更改的对象。所以,赋值运算符的左边应该是一个可修改的左值。

术语”右值“(rvalue)指的是能赋给可修改的左值的量。例如:

bmw=2002

这里bmw是一个可修改的左值,2002是一个右值。在您学习事物的名称的时候,我们称之为”项目“的东西(比如在”符号=左边的项目“中的”项目“)的正确术语是”操作数“(operand)。操作数是运算符操作的对象。例如,您可以把吃一个汉堡描述为”吃“运算符操作”汉堡“这个操作数。与之相似,您可以说=运算符的左操作数是可修改的左值。

算术运算符:+、-、*、/; 正负+、-;  C语言除法运算符/:整数除法结果的小数部分被丢弃,趋零截尾。

sizeof运算符:以字节为单位返回其操作数的大小。操作数可以是一个数据对象或是一个类型(如float),如果是类型必须放在圆括号里。C规定sizeof返回size_t类型的值,这是一个无符号整数类型,是利用typedef机制从标准类型定义的。C99规定把%zd作为显示size_t类型值的printf()说明符。

%:取模运算符,用于整数运算,该运算符计算出用它右边的整数去除它左边的整数得到的余数。对浮点数无效。

增量和减量运算符:++和--,有前缀模式和后缀模式。它们具有很高的优先级,只有圆括号的优先级比它们高。

表达式(expression)由运算符和操作数组合构成。简单的表达式是一个单独的操作数,以此为基础可以建立复杂的表达式。操作数可以是常量、变量或者是二者的组合。一些表达式是由多个子表达式组成的。如:

4、-6、4+21、a*(b+c/d)/20、q=5*2、x=++q%3、q>3......

C的一个重要属性是每一个c表达式都有一个值。有=的表达式的值与=左边的变量取得的值相同。6+(c=3+8)合法!

语句(statement)是构造程序的基本成分。程序(program)是一系列带有某种必须的标点的语句集合。一个语句是一条完整的计算机指令。在C中,语句用结束处的一个分号标识。

C把任何后面加有一个分号的表达式看作是一个语句(表达式语句)。赋值语句(assignmenet statement)为一个变量分配一个值。函数语句(function statement)引起函数的执行。

副作用(side effect)是对数据对象或文件的修改。例如:

states=50
的副作用是将states的值设置为50。

一个顺序点(sequence point)是程序执行中的一点;在该点处,所有的副作用都在进入下一步前被运算。在C中,语句里的分号标志了一个顺序点。它意味着一个语句中赋值运算符、增量运算符及减量运算符所做的全部改变必须在程序进入下一个语句前发生。任何一个完整的表达式的结束也是一个顺序点。顺序点帮助阐明后缀增量动作何时发生。

复合语句(compound statement)是使用花括号组织起来的两个或更多的语句;它也被成为一个代码块(block)。while循环中整个复合语句被认为是一个语句。

类型转换:

1、当出现在表达式里时,有符号和无符号的char和short类型都将自动被转换为int,在需要的情况下,将被自动转换为unsigned int。在K&R C下(但不是当前的C下),float将被自动转换为double。因为是转换成较大的类型,所以这些转换被称为提升(promotion)。

2、在包含两种数据类型的任何运算里,两个值都被转换成两种类型里较高的级别。(从高到低的顺序是:long double,double,float,unsigned long long,long long, unsigned long, long, unsigned int 和int。

3、在赋值语句里,计算的最后结果被转换成将要被赋予值的那个变量的类型。这个过程可能导致提升,但也可能导致降级(demotion),降级是将一个值转换成一个更低级的类型。提升通常是一个平滑的无损害的过程,但是降级可能导致真正的问题。原因很简单:一个较低级别的类型可能不够大,不能存放一个完整的数。

圆括号和类型名一起构成了指派运算符(cast operator)。它将跟在它后面的值转换成由圆括号中的关键字所指定的类型。例如,(float)9将整数9转换为浮点数9.0。







相关标签: C C Primer Plus

上一篇:

下一篇: