前面介绍的各种运算都是以字节作为最基本位进行的。但在很多系统程序中常要求在位(bit)一级进行运算或处理。C语言提供了位运算的功能,这使得C语言也能像汇编语言一样用来编写系统程序。
1.按位“与”运算&
b3=b1&b2
例如:char b1=25,b2=77,化成二进制(或十六进制)表示为
b1=00011001(或0x1B)
b2=01001101(或0x4D)
b3=00001001(或0x09)即b3=9
&可用作“掩码”运算,即屏蔽掉某些位。例如,掩码为127,化成二进制表示为01111111,可屏蔽掉第7位。
2.按位“或”运算|
3.按位“异或”运算^
很容易验证:b3=b1^b2^b2=b1。这个特性可用于某些数据处理。例如,一个文本的每个字经过与一个关键字做异或处理,就被简单地加密了。要解密时,只需用同一个关键字再做一次异或处理,使其恢复原样。又如,用下列异或处理程序:
同样实现a和b交换,异或处理的速度更快。
4.按位取反运算符~
w2=~w1,w2为w1二进制按位取反。
例如:unsigned int w1=0122457,w2;
二进制表示(8进制表示)(www.xing528.com)
w11010010100101111(0122457)
w20101101011010000(0055320)
5.左移运算符<<
左移运算符“<<”是双目运算符。其功能把“<<”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。
例如:
a<<4
指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。
6.右移运算符>>
右移运算符“>>”是双目运算符。其功能是把“>>”左边的运算数的各二进位全部右移若干位,由“>>”右边的数指定移动的位数。
例如:
设a=15,
a>>2
表示把000001111右移为00000011(十进制3)。
应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1取决于编译系统的规定。Turbo C和很多系统规定为补1。
【例5-9】
【例5-10】
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。