C语言程序设计教程
上QQ阅读APP看书,第一时间看更新

2.7 位运算符

C语言为整型数据提供了位运算符。位运算以字节(byte)中的每一个二进位(bit)为运算对象,最终的运算结果还是整型数据。位运算又分为按位逻辑运算和移位运算。

2.7.1 按位逻辑运算符

按位逻辑运算符共有4种。

按位逻辑与运算符:“&”;按位逻辑或运算符:“|”;按位逻辑非运算符:“~”;按位逻辑异或运算符:“^”。

设用x、y表示字节中的二进位,取值为0或1。按位逻辑运算符的运算法则为:

当x、y均为1时,x&y的结果为1,否则为0。

当x、y均为0时,x|y的结果为0,否则为1。

当x、y的值不相同时,x^y的结果为1,否则为0。

当x=1时,~x=0,而当x=0时,~x=1。

位运算表达式的格式:

整型变量名 位运算符&、|或^整型变量名

~整型变量名

更一般地,上述整型变量名可用整型表达式来替代。

【例2-9】位运算符的应用。

设有定义:int a=55,b=36;计算:a&b、a|b、a^b及~a的结果。

假定每个整型变量占两个字节(16bit),则在内存中的二进制数a、b为:

a:0000000000110111 b:0000000000100100

按上述按位运算的法则,列出下述算式:

978-7-111-49786-8-Chapter02-20.jpg

上述结果可用下面的程序加以检验:

978-7-111-49786-8-Chapter02-21.jpg

程序说明:

第4~5行:由于四位二进制数对应一位十六进制数,所以这两种数制之间的转换最直接。这两个程序行通过格式控制符%x实现以十六进制格式输出a&b,a|b,a^b及~a的结果。

运行结果:

显示:a&b=24,a|b=37

a^b=13,~a=ffc8

上述结果均为十六进制数,若转换成二进制数就是例中所列算式的结果。

2.7.2 移位运算符

C语言提供的移位运算实现将整型数据按二进制位右移或左移的功能。

向右移位的运算符为:“>>”,向左移位的运算符为:“<<”。

移位运算表达式的格式:

整型变量名 移位运算符>>或<<整型常量

更一般地,上述整型变量名可用整型表达式来替代。

【例2-10】移位运算符的应用。

设有定义inta=55,b=36;计算(a+b)>>2、(a-b)<<3的结果。

参照例2-9,a+b和a-b的结果91和19在内存中的二进制数分别为:

978-7-111-49786-8-Chapter02-22.jpg

注意:

1)左移或右移时出现的空位应当补0。

2)如果参与移位运算的变量是有符号的整型变量,则应当将最左边的二进制位当做符号位,并根据补码来确定最终的结果。建议读者参考有关计算机组成原理的书籍。

读者可以设计一程序检验上述结果。