C语言位运算符与位表达式

作者:vich 发布于 2009-3-31 17:09 评论(0)人阅读

位运算原本属于汇编语言的功能,由于C语言是介于高级语言和汇编语言之间的一种中间语言,是为开发系统软件而设计的,所以它提供了多种类似于汇编语言的功能。

位运算是指对二进制数按位进行运算。其操作对象是一个二进制位集合,每个二进制位只能存放0或1。例如,一个整型数据占据16个二进制位(2个字节),则最右边的二进制位称为第0位,最左边的二进制位称为最高位。

一、位运算符
C语言提供了6种位运算符,除了“~”为单目运算符以外,其余均为双目运算符,即有2个运算对象。

  1. ~ 按位求反,如~x,表示对x的二进制数值按位求反。
  2. &  按位与,如x&y,表示对x,y的二进制数值按位与。
  3. |   按位或,如x|y,表示对x,y的二进制值按位或。
  4. ∧  按位异或,如x∧ y,表示对x,y的二进制值按位异或。
  5. <<  左移,如x<<m,表示对x的二进制值左移m位。
  6. >>  右移,如x>>m,表示对x的二进制值右移m位。

二、位运算符求值规则

  1. ~ 按位求反,~0=1,~1=0。
  2. &  按位与,0&0=0,0&1=0,1&0=0,1&1=1。
  3. |   按位或,0|0=0,0|1=1,1|0=1,1|1=1。
  4. ∧  按位异或,0∧0=0,0∧1=1,1∧0=1,1∧1=0。
  5. <<  左移,00101110<<2,结果10111000。
  6. >>  右移,00101110>>2,结果00001011。

三、位运算优先级
如果在同一个表达式中出现多种运算符,则它的运算优先级为:

  1. <<  >>
  2. &
  3. |

(其中1为最高,5为最低)

另外要注意的是:

  1. 位运算对象只能是整型(int,short,unsigned,long )或字符型(char)数据。
  2. 左移的规则是将二进制数向左移动若干位,左边移走的高位被丢弃,右边被空出来的低位补零。
  3. 右移的规则是将二进制数向右移动若干位,右边移走的地位被丢弃,左边被空出来的高位补零。
  4. 对于无符号整数来讲,左端空出的高位。而对于有符号的数来讲,如果符号位为0(即正数),则被空出来的高位部分补零。如果符号位为1(即负数),则被空来的高位部分补0还是补1,与使用的计算机系统有关,有的计算机系统补0,称为“逻辑右移”,有的计算机系统补1,称为“算术右移”。
  5. 为了简化程序并提高编译效率,C语言还允许在赋值运算符“=”左边加上位运算符,构成位复合赋值运算符。

x&=y ,等价于x=x&y ,
x|=y ,等价于x=x|y
x∧=y ,等价于 x=x∧ y
x<<=y,等价于x=x<<y
x>>=y,等价于x=>>y 
 先计算位运算,在将运算结果重新赋给x。

转载请注明:转载自微风博客

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

我的SNS

相关标签

最新文章

技术摘要

最新评论及回复

热门文章