二级C 精品课程3-1-5:C 运算符之位运算符

文章作者 100test 发表时间 2007:03:10 17:14:58
来源 100Test.Com百考试题网


计算机等级考试训练软件《百宝箱》

3.1.5 位运算符
  C 提供6种位运算符,可以进行二进制位的运算,参见表3-7。
  位运算符要求操作数是整型数,并按二进制位的顺序来处理它们。取反运算符是单目运算符,其它位运算符是双目运算符。取反运算符(~)将操作数的二进制位逐位取反。逐位与运算符(&.)比较两个操作数对应的二进制位,当两个二进制位均为1时,该位的结果取1,否则取0。逐位或运算符(|)比较两个操作数对应的二进制位,当两个二进制位均为0时,该位的结果取0,否则取1。逐位异或运算符(^)比较两个操作数对应的二进制位,当两个二进制位均为1或均为0时,该位的结果取0,否则取1。
  逐位左移运算符(<<)和逐位右移运算符(>>)均有一个正整数n作为右操作数,将左操作数的每一个二进制位左移或右移n位,空缺的位设置为0或1。对于无符号整数或有符号整数,如果符号位为0(即为正数),空缺位设置为0;如果符号位为1(即为负数),空缺位是设置为0还是设置为1,要取决于所用的计算机系统。
表格 表3-7 位运算符
运算符 名字 实例
~ 取反 ~\011 // 得出 \366
&. 逐位与 \011 &. \027 // 得出\001
| 逐位或 \011 | \027 // 得出\037
^ 逐位异或 \011 ^ \027 // 得出\036
<< 逐位左移 \011 << 2 // 得出\044
>> 逐位右移 \011 >> 2 // 得出\002

  位操作运算符是用来进行二进制位运算的运算符。它分为两类:逻辑位运算符和移位运算符。
  1、逻辑位运算符
  (1)单目逻辑位运算符:~(按位求反)
  作用是将各个二进制位由1变0,由0变1。
  (2)双目逻辑运算符:&.(按位与),|(按位或),^(按位异或)
  其中优先级&.高于^,而^高于|。
  &. :两个都为1时结果为1。
  | :两个其中有一个为1则结果为1。
  ^ :两个不同则结果为1,否则为0。
  2、移位运算符
  移位运算符有两个,<<(左移)、>>(右移)。两个 都是双目运算符。
  例. 指出下面表达式的功能。
  (p&.0377)|(k&.0xff)<<8
  答:将整数p的低字节作为作为结果的低字节,k的低字节作为结果的高字节拼成一个新的整数。

   针对两个操作数011和027,表3-8给出各个位运算符的计算实例,运算结果在表3-7中。为了避免符号位的麻烦(它与机器有关),我们采用无符号的整数。
  unsigned char x = \011.
  unsigned char y = \027.

表格 表3-8 位运算符如何运算
实例 10进制值 二进制值
x 011
0 0 0 0 1 0 0 1
y 027
0 0 0 1 0 1 1 1
~x 366
1 1 1 1 0 1 1 0
x &. y 001
0 0 0 0 0 0 0 1
x | y 037
0 0 0 1 1 1 1 1
x ^ y 036
0 0 0 1 1 1 1 0
x << 2 044
0 0 1 0 0 1 0 0
x >> 2 002
0 0 0 0 0 0 1 0
  位运算符要求操作数是整型数,并按二进制位的顺序来处理它们。位运算符除取反运算符~为单目运算符外,其余的都是双目运算符,这可以从上面的表格中的表达式例子中看出来。具体说来:
  &.为逐位与运算符,用于把两个操作数对应的二进制位进行逻辑与操作,逻辑与的操作上一节已经作了介绍,这里不再赘述。所以0x011&.0x001其实就是二进制数0000000000010001B 和二进制数0000000000000001B每一位都进行逻辑与运算,其结果必然是0000000000000001B 即0x001。
  |为逐位或运算符,用于把两个操作数对应的二进制位进行逻辑或操作。所以,根据逻辑或的运算规则,表达式0x011|0x001的结果必然是0x011。有兴趣的同学可以自己把相应的二进制位进行逐个的逻辑或运算,看看结果是不是0x011.。
  ^为逐位异或运算符,用于把两个操作数对应的二进制位进行异或操作。因此,0x011^0x001的结果是0000000000010000B,即0x010。
  <<为逐位左移运算符,用于将左操作数的每一个二进制位左移右操作数位,空缺的位设置为0或1。对于无符号整数或有符号整数,但符号位为0(即为正数),空缺位设置为0;如果符号位为1(即为负数),空缺位是设置为0,还是设置为1,要取决于所用的计算机系统。因此,0x011<<2 结果是0x044。
  >>为逐位右移运算符,将左操作数的每一个二进制位右移右操作数位,空缺的位设置为0或1,和逐位左移运算符一致。因此,0x011>>2的结果是0x004
  具体的运算的进行还可以参考表3-7位运算符如何运算。



相关文章


二级C语言考试辅导教程第七章:结构与联合[2]
二级C 精品课程3-1-5:C 运算符之位运算符
二级C语言考试辅导教程第六章:指针[5]
二级C语言考试辅导教程第六章:指针[3]
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛