程序设计基础课件第2章操作符_第1页
程序设计基础课件第2章操作符_第2页
程序设计基础课件第2章操作符_第3页
程序设计基础课件第2章操作符_第4页
程序设计基础课件第2章操作符_第5页
已阅读5页,还剩28页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作符(operator,又叫运算符)操作符用于描述对数据的操作(运算)。数据称为操作数,它们可以是:常量、变量函数其它操作符的运算结果通常情况下,操作符所指定的运算不会改变操作数自身的值如:cout<<a/2;C++有些操作符(如:=、++、--等)的运算在得到一个运算结果的同时,也会改变操作数的值,称这些操作符带有副作用。如

int

b=6;b=2;C++操作符的种类算术操作符关系与逻辑操作符位操作符赋值操作符条件操作符……注意:运算符和我们数学里的运算符不是一一对应的,比如算平方根,没有这样的符号1算术操作符+

-

*

/

%

+

-

++ --算术操作符的操作数类型一般为算术类型也可以是枚举类型和指针类型。(第五章)操作符“/”用于整型操作数时表示整除,小数点后面的数将舍去,并且不进行四舍五入。例如:3/2的结果为1;-10/3的结果为-3取余数“%”操作符用于计算两个整型数相除的余数,操作数的类型应为整型和枚举类型。例如:10%3的结果为1;8%2的结果为0;3%5

的结果为3较小的数模较大的数,结果一定为较小的数(a/b)*b+a%b==a

(a、b为整数)取余数“%”操作符的操作数一般为正数,对于负数,不同的编译系统有不同的实现,运算结果不同,所以在这种情况下,取余数“%”操作符具有歧义性。取负与取正操作符-将一操作数取负,即由正变负、由负变正。+将一操作数取正,实际上未变,很少用。注意:取正/取负与加/减操作符的区别:功能/所连接的操作数个数/优先级/结合性不同自增/自减操作符

++

--通常用于循环变量的自增/自减,单独成句自增(自减)操作符带有副作用前后缀运算前缀(

++i,--i

)——先自增(减),再取变量的值后缀(

i++,i--)——先取变量的值,再自增(减)如

:i=3;

j=++i;//

i、j的值均为4i=3;

j=i++;//i的值变为4、j的值为3关系与逻辑操作符程序中经常要根据某个条件来决定其后续的动作条件的判断一般设计为对数据进行比较和逻辑运算关系操作符的操作数类型可以为算术类型、枚举类型和指针类型逻辑操作符的操作数类型为bool类型,一般为关系运算的结果。关系与逻辑操作的结果为bool类型的值:true或false关系操作符关系操作符对数据进行大小比较,有:<

<=

>

>=

==

!=例如:3>2的结果为true4.3<1.2的结果为false'A'<'B'的结果为truefalse<true的结果为trueint

main(){double a,

b,

c;abc=

1.3;=

1.2;=

a

-

b;if(c==0.1)cout<<“They

are

equal

!”<<endl;elsecout<<“They

are

not

equal

!”<<endl;return

0;}结果:They

are

not

equal

!Why?实数判断是否相等有的十进制数的二进制不能精确表示。如:0.1x==0.1

结果不能保证正确可以采用绝对值比需要的大或者小的办法。可写成:fabs(x-0.1)<1e-6fabs(…)取绝对值函数#include

<cmath>逻辑操作符实现逻辑运算,用于复杂条件的表示中。!

:表示与操作数条件相反的情况,即:非表示“a

不大于b”

!(a

>

b)&&:表示两个子条件同时成立,即:并表示“年龄小于10岁并且重量大于30公斤”(age

<

10)

&&

(weight

>

30)||

:

表示两个子条件“或者”的关系表示字符变量ch不是数字字符(ch

<

'0')

||

(ch

>

'9')逻辑真值表!

true

false !false

turetrue

&&

true

truetrue

&&

false

falsefalse

&&

false

falsefalse

&&true

falsetrue

||

true

truetrue

||

false

truefalse

||

false

falsefalse

||

true

true短路求值(short-circuitevaluation)C++中,对于逻辑“与”操作符“&&”和逻辑“或”操作符

“||”,如果第一个操作数已能确定运算结果了,则不再计算第二个操作数的值,该规则称为短路求值。如:true

||

x

的结果为truefalse

&&

x

的结果为false短路求值一方面能够提高逻辑运算的效率,另一方面它也能为逻辑运算式中的其它运算提供一个“卫士”(guard)。如:(number

!=

0)

&&

(1/number

>

0.5)位操作符在C++中提供了对整型和枚举类型数据按操作数的各个二进制位分别进行运算的操作符。逻辑位运算~

&

|

^移位运算。<<

>>逻辑位操作符~(按位取反),&(按位与),|(按位或),^(按位异或)~0

→

1~1

→

00|0

→

00|1

→

11|0

→

11|1

→

10^0

→00^1

→11^0

→11^1

→00&0

→

00&1

→

01&0

→

01&1

→

1假设一个系统需要管理8个资源,这个8个资源用变量s来进行管理。变量s的类型是char(1个字节,8个二进制位)每个二进制位从低位到高位,分别对应第1个资源,…第8个资源如果s

=1;

对应的二进制是

0000

0001,表示第1个资源可用,其余不可用。下面

,举例说明逻辑位操作的应用。1、想知道第5个资源是否可用,如何判断变量s对应的二进制位数的第5位是1?注意这里不能通过输出s的值判断,利用&这个操作的特点,0&?

都是00x10 ==>

0

0

0

1

0

0

0

0s ==>

?

?

?

?

?

?

?

? (因为不能输出,所以目前不知道)& ==>

0

0

0

?

0

0

0

0结果只能有两个:0

0

0

0

0

0

0

0

(s的第5位是0,则第5个资源不可用)0

0

0

1

0

0

0

0

(s的第5位是1,则第5个资源可用)2、想把第7个资源设为可用,也就是将s的第7位设为10x40

==>

01

0

0

0

0

0

0s

==> ?

?

?

?

?

?

?

?|

==>

?1

??????

(

|操作的特点:1|?结果是1

)因此s=

s

|0x40就可以把第7个资源设为可用。逻辑位操作符用法按位与通常用作:按位清零或保留某些指定位按位或通常用作:按位置一按位异或与0相异或,保持原值不变;与自身相异或,则全部位清零。通常用作:特定位翻转按位取反通常用作:所有位翻转左移(Left

Shift)运算规则i

<<

n把i各位全部向左移动n位最左端的n位被移出丢弃最右端的n位用0补齐用法若没有溢出,则左移n位相当于乘上2n运算速度比真正的乘法和幂运算快得多运算举例5<<1为10,5<<2为200000

01010

0000

101000

0001

0100若左移后的数据超出表示范围,则发生溢出右移(Right

Shift)运算规则i

>>

n把i各位全部向右移动n位最右端的n位被移出丢弃最左端的n位用0补齐(逻辑右移)或最左端的n位用符号位补齐(算术右移)用法右移n位相当于除以2n,并舍去小数部分运算速度比真正的除法和幂运算快得多运算举例5>>1为2,5>>2为1000001010000

0010

10000

0001

01注意:右移,高位处理方法无符号、有符号的非负数---高位补0有符号的负数

---

高位与原来相同(c++国标没有规定)不同长度数据位运算规则两个操作数右端对齐短的数据左端用符号位补齐正数或无符号数左端用0补满负数左端用1补满两个操作数长度相等后再运算位运算小结~

<<

>>

&

^

|位运算的操作数是一个二进制位集合位运算速度快,效率高,节省存储空间只能对整型数据进行位运算负数以补码形式参与运算注意与逻辑运算区别(位逻辑运算的结果不是逻辑值,而是一个数)~8

为2478&1为08|1为9!8

为08&&1为18||1为1~000010000000100000001000(11110111)0000000100000001赋值操作符改变变量的值,两种方法通过输入操作改变通过赋值操作来实现。赋值操作构成了冯•诺依曼计算模型的一个重要特征(状态转换),同时,也构成了冯•诺依曼计算的一个瓶颈。赋值操作符也是有副作用的操作符(修改变量的值)简单赋值操作符*

=

是将一个操作数赋给另一个操作数*

当赋值操作的两个操作数类型不同时,右边操作数转换成左边的操作数类型后再赋给左边的操作数。注意与等于(==)操作符的区别:x=1

和x

==1

的结果不同x=1

的结果:变量x赋值为1,操作符运算的结果也为1x==1的结果:变量x的值没有变,操作符运算的结果根据x的值判断,相等则为true,不等则为false1、没有副作用的操作符

int

a=1,b=2;a+b

“+”运算结果是3,并且变量a,b的值没有改变运算结果可以直接输出:cout<<a+b;也可以给别的变量赋值

int

c=a+b;2、有副作用的操作符int

x=5;x+=3

“+=”运算结果是8,并且变量x的值也被修改成8运算结果可以直接输出:cout<<(x+=3);也可以给别的变量赋值

int

y=x+=3;注意:cout<<(x+=3);必须加圆括号,因为+=的优先级比<<低inty=x+=3;不需要,因为两者优先级一样,并且是右结合,也就是从右往左计算。复合赋值操作符&=

^=

|=+= -=

*=

/=

%=

<<=

>>=a#=b功能上等价于:a=a#(b)例如:

a+=3

等价于

a

=

a+(3)

也就是

a=a+3a-=b+c

等价于

a

=

a-(b+c)运算过程:先运算a#(b),注意b可以是表达式,所以要加圆括号然后把结果赋予第一个操作数为此,第一个操作数必须是变量,且其值将被改变。a+=a-=a*a;思考:若

int

a=12;

则a为?*优先级比+=、-=高,先计算a*a

得到144,即:a+=a-=144;+=,-=的结合性是右结合,从右向左计算,先算a-=144运算结果:a的值改变为-132,a-=144的结果也为-132最后计算a+=-132

(-132是a-=144的结果)得到:-264条件操作符(

?:)d1

?

d2

:d3如果d1的值为true,则运算结果为d2,否则为d3。ch=(c>=‘a’

&&

c<=‘z’)

?

c-’a’+’A’

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论