欢迎来到天天文库
浏览记录
ID:44951061
大小:128.50 KB
页数:17页
时间:2019-11-05
《第2章 数据和表达式续9.15号》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、2.5基本运算符和表达式2.5.1基本运算符2.5.1.1算术运算符-+-*/%其中:除了模除运算符仅能用于int和char型数据外,其他运算符可以用于任何基本数据类型。应当说明的是,当除法运算符的两个操作数均为int和char型数据时,则运算的结果(即商)为一个int型值,小数部分自然丢失。另外,算术运算还存在溢出问题(参见下例)。注:除法溢出将导致程序的异常终止。#includeintmain(){inti,j;i=32767;j=i+1;cout<<"i="<2、n';return0;}该例的预期输出应为:i=32767j=32768而实际的输出结果则为:i=32767j=-32768这是由于溢出而造成的。整数32767的二进制形式为:0111111111111111加1后变为:1000000000000000这正是-32768的二进制补码。2.5.1.2关系运算符<<=>>===!=从理论上讲,关系运算的结果应当是一个逻辑值(“真”或“假”)。而C++语言中不存在逻辑值,所以关系运算的结果或者是一个非零值(通常为1,代表逻辑真),或者是零(代表逻辑假)。由于C++关系运算的结果为一整型值3、,所以可以将运算结果用于算术运算中。例:3<=5//结果为1(3>5)!=0//结果为0(3<5)+1//结果为22.5.1.3逻辑运算符!&&4、5、1.逻辑非!逻辑非也叫逻辑取反,该运算符为一元运算符。当操作数的值为零时,逻辑非运算的结果为一个非零值(通常为1);否则为零。2.逻辑与&&当两个操作数的值均不为零时,逻辑与运算的结果为一个非零值(通常为1);否则为零。3.逻辑或6、7、当两个操作数的值均为零时,逻辑或运算的结果为零;否则为一非零值(通常为1)。2.5.1.4位运算符位运算符是对操作数按二进制位进行处理的运算符。因此其操作8、数只能是int或char型的数据。~&9、^<<>>为下面介绍的方便,设有以下两个变量:unsignedcharc,d;并设它们的值分别为135和43,则它们的二进制形式为:c10000111d001010111.按位取反~按位取反运算符是一元运算符,它将其操作数逐位取反,即将0变为1;将1变为0。比如,~c的结果为01111000,即十进制的120。2.按位与&c&d的结果为00000011,即十进制的3。c10000111d00101011c&d000000113.按位或10、c11、d的结果为10101111,即十进制的175。c1012、000111d00101011c13、d101011114.按位异或^c^d的结果为10101100,即十进制的172。c10000111d00101011c^d101011005.按位左移<<运算符“<<”将其左操作数左移右操作数所规定的位数,移空的位补以0。例如:d<<1的结果为01010110,即十进制的86。而d<<1的结果为10101100,即十进制的172。可以证明,将一个整数左移n位,其结果为将该数乘以2n。所以在程序中常用按位左移快速地进行乘法运算。6.按位右移>>运算符“>>”将其左操作数右移右操作数所规定的位数,移14、空的位补以0。例如:c>>1的结果为01000011,即十进制的67。可以证明,将一个整数右移n位,其结果为将该数整除以2n。所以在程序中常用按位右移快速地进行除法运算。注意:按位左移运算符与插入运算符同形、按位右移运算符与提取运算符同形。这种同一符号表示不同运算的现象在C++语言中非常普遍,编译器会自动根据上下文来识别不同的符号。2.5.1.5sizeof运算符sizeof运算符是一个一元运算符,它的运算结果为操作数按字节计的大小。其用法为:sizeof(type)或sizeof(var)例:sizeof(long)//结果为415、intk;sizeof(k)//结果为22.5.2表达式表达式是将常量、变量用运算符连起来的式子。例:3*a+4/bx1=(-b+sqr(b*b-4*a*c))/(2*a)x5任何一个表达式都有一个值,该值就是表达式中各运算符的最终运算结果。对于单一变量或单一常量这样的特例表达式,其值就是变量或常量的值。2.6赋值表达式和类型转换2.6.1赋值表达式含有赋值运算符的表达式叫做赋值表达式。其一般形式为:variable=expression可以看出,在赋值表达式中,赋值运算符的左操作数必须是一个变量,而右操作数可以是任一合法的表达式16、。赋值表达式的值就是其右操作数的值。由于赋值运算符要求其右操作数为一个表达式,而赋值表达式是一个合法的表达式,所以可以将赋值表达式用做赋值运算符的右操作数,从而构成所谓的“串连”赋值表达式。如:i=j=3*52.6.2增量减量运算符++--增量和减
2、n';return0;}该例的预期输出应为:i=32767j=32768而实际的输出结果则为:i=32767j=-32768这是由于溢出而造成的。整数32767的二进制形式为:0111111111111111加1后变为:1000000000000000这正是-32768的二进制补码。2.5.1.2关系运算符<<=>>===!=从理论上讲,关系运算的结果应当是一个逻辑值(“真”或“假”)。而C++语言中不存在逻辑值,所以关系运算的结果或者是一个非零值(通常为1,代表逻辑真),或者是零(代表逻辑假)。由于C++关系运算的结果为一整型值
3、,所以可以将运算结果用于算术运算中。例:3<=5//结果为1(3>5)!=0//结果为0(3<5)+1//结果为22.5.1.3逻辑运算符!&&
4、
5、1.逻辑非!逻辑非也叫逻辑取反,该运算符为一元运算符。当操作数的值为零时,逻辑非运算的结果为一个非零值(通常为1);否则为零。2.逻辑与&&当两个操作数的值均不为零时,逻辑与运算的结果为一个非零值(通常为1);否则为零。3.逻辑或
6、
7、当两个操作数的值均为零时,逻辑或运算的结果为零;否则为一非零值(通常为1)。2.5.1.4位运算符位运算符是对操作数按二进制位进行处理的运算符。因此其操作
8、数只能是int或char型的数据。~&
9、^<<>>为下面介绍的方便,设有以下两个变量:unsignedcharc,d;并设它们的值分别为135和43,则它们的二进制形式为:c10000111d001010111.按位取反~按位取反运算符是一元运算符,它将其操作数逐位取反,即将0变为1;将1变为0。比如,~c的结果为01111000,即十进制的120。2.按位与&c&d的结果为00000011,即十进制的3。c10000111d00101011c&d000000113.按位或
10、c
11、d的结果为10101111,即十进制的175。c10
12、000111d00101011c
13、d101011114.按位异或^c^d的结果为10101100,即十进制的172。c10000111d00101011c^d101011005.按位左移<<运算符“<<”将其左操作数左移右操作数所规定的位数,移空的位补以0。例如:d<<1的结果为01010110,即十进制的86。而d<<1的结果为10101100,即十进制的172。可以证明,将一个整数左移n位,其结果为将该数乘以2n。所以在程序中常用按位左移快速地进行乘法运算。6.按位右移>>运算符“>>”将其左操作数右移右操作数所规定的位数,移
14、空的位补以0。例如:c>>1的结果为01000011,即十进制的67。可以证明,将一个整数右移n位,其结果为将该数整除以2n。所以在程序中常用按位右移快速地进行除法运算。注意:按位左移运算符与插入运算符同形、按位右移运算符与提取运算符同形。这种同一符号表示不同运算的现象在C++语言中非常普遍,编译器会自动根据上下文来识别不同的符号。2.5.1.5sizeof运算符sizeof运算符是一个一元运算符,它的运算结果为操作数按字节计的大小。其用法为:sizeof(type)或sizeof(var)例:sizeof(long)//结果为4
15、intk;sizeof(k)//结果为22.5.2表达式表达式是将常量、变量用运算符连起来的式子。例:3*a+4/bx1=(-b+sqr(b*b-4*a*c))/(2*a)x5任何一个表达式都有一个值,该值就是表达式中各运算符的最终运算结果。对于单一变量或单一常量这样的特例表达式,其值就是变量或常量的值。2.6赋值表达式和类型转换2.6.1赋值表达式含有赋值运算符的表达式叫做赋值表达式。其一般形式为:variable=expression可以看出,在赋值表达式中,赋值运算符的左操作数必须是一个变量,而右操作数可以是任一合法的表达式
16、。赋值表达式的值就是其右操作数的值。由于赋值运算符要求其右操作数为一个表达式,而赋值表达式是一个合法的表达式,所以可以将赋值表达式用做赋值运算符的右操作数,从而构成所谓的“串连”赋值表达式。如:i=j=3*52.6.2增量减量运算符++--增量和减
此文档下载收益归作者所有