AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > C语言

C语言运算符

51自学网 2015-09-08 http://www.51zixue.net


通常我们可把位操作AND作为关闭位的手段,这就是说两个操作数中任一为0的位,其结果中对应位置为0。例如,下面的函数通过调用函数read_modem(),从调制解调器端口读入一个字符,并将奇偶校验位置成0。

字节的位8是奇偶位,将该字节与一个位1到位7为1、位8为0的字节进行与操作,可将该字节的奇偶校验位置成0。表达式ch&127正是将ch中每一位同127数字的对应位进行与操作,结果ch的位8被置成了0。在下面的例子中,假定ch接收到字符"A"并且奇偶位已经被置位。

一般来说,位的AND、OR和XOR操作通过对操作数运算,直接对结果变量的每一位分别处理。正是因为这一原因(还有其它一些原因),位操作通常不像关系和逻辑运算符那样用在条件语句中,我们可以用例子说明这一点:假定X=7,那么x&&8为Ture(1),而x&8却为Flase(0)。
记住,关系和逻辑操作符结果不是0就是1。而相似的位操作通过相应处理,结果可为任意值。换言之,位操作可以有0或1以外的其它值,而逻辑运算符的计算结果总是0或1。
移位操作符>>和<<将变量的各位按要求向或向左移动。右移语句通常形式是:
variable>>右移位数
左移语句是:
variable<<左移位数
当某位从一端移出时,另一端移入0(某些计算机是送1,详细内容请查阅相应C编译程序用户手册)。切记:移位不同于循环,从一端移出的位并不送回到另一端去,移去的位永远丢失了,同时在另一端补0。
移位操作可对外部设备(如D/A转换器)的输入和状态信息进行译码,移位操作还可用于整数的快速乘除运算。如表2-9所示(假定移位时补0),左移一位等效于乘2,而右移一位等效于除以2。

每左移一位乘2,注意x<<2后,原x的信息已经丢失了,因为一位已经从一端出,每右移一位相当于被2除,注意,乘后再除时,除操作并不带回乘法时已经丢掉的高位。反码操作符为~。~的作用是将特定变量的各位状态取反,即将所有的1位置成0,所有的0位置成1。位操作符经常用在加密程序中,例如,若想生成一个不可读磁盘文件时,可以在文件上做一些位操作。最简单的方法是用下述方法,通过1的反码运算,将每个字节的每一位取反。
原字节 00101100
第一次取反码 11010011
第二次取反码 00101100
注意,对同一行进行连续的两次求反,总是得到原来的数字,所以第一次求反表示了字
节的编码,第二次求反进行译码又得到了原来的值。可以用下面的函数encode()对字符进行编码。

2.6.5 ?操作符
C语言提供了一个可以代替某些if-then-else语句的简便易用的操作符?。该操作符是三元的,其一般形式为:
EXP1?EXE2:EXP3
3
EXP1,EXP2和EXP3是表达式,注意冒号的用法和位置。
操作符“?”作用是这样的,在计算EXP1之后,如果数值为True,则计算EXP2,并将结果作为整个表达式的数值;如果EXP1的值为Flase,则计算EXP3,并以它的结果作为整个表达式的值,请看下例:
x=10;
;y=x>9?100:200;
例中,赋给y的数值是100,如果x被赋给比9小的值,y的值将为200,若用if-else语句改写,有下面的等价程序:
x=10;if(x>9)y=100;
;elsey=200;
;
有关C语言中的其它条件语句将在第3章进行讨论。
2.6.6 逗号操作符
作为一个操作符,逗号把几个表达式串在一起。逗号操作符的左侧总是作为void(无值),这意味着其右边表达式的值变为以逗号分开的整个表达式的值。例如:
x=(y=3,y+1);
这行将3赋给y,然后将4赋给x,因为逗号操作符的优先级比赋值操作符优先级低,所以必须使用括号。实际上,逗号表示操作顺序。当它在赋值语句右边使用时,所赋的值是逗号分隔开的表中最后那个表达式的值。例如,
y=10;x=(y=y-5,25/y);
执行后,x的值是5,因为y的起始值是10,减去5之后结果再除以25,得到最终结果。
。在某种意义上可以认为,逗号操作符和标准英语的and是同义词。
2.6.7关于优先级的小结
表2-10列出了C语言所有操作符的优先级,其中包括将在本书后面讨论的某些操作符。注意,所有操作符(除一元操作符和?之外)都是左结合的。一元操作符(*,&和-)及操作符“?”则为右结合。

 
 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,51zixue.net不保证资料的完整性。
 

上一篇:C语言表达式  下一篇:C语言字符型数据