c语言之中的位运算符是怎么运算的呢?

如题所述

所谓位,就是指将一个或两个数转换成二进制按每一位进行运算

&位与
运算规则
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1

|位或
运算规则
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1

^异或
运算规则
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0

~取反
运算规则
将0变1
将1变0

<<左移
运算规则
左移n位,相当于给一个十进制数乘以2的n次方

>>右移
运算规则
右移n位,相当于给一个十进制数除以2的n次方

前三个是两个二进制数之间的运算
后三个是一个二进制数自身的运算
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-10-19
C语言提供了表12—1所列出的6种位运算符以及表12-2所列出的5种扩展运算符。
表12-1
运 算 符 含 义 优 先 级
~ 按位求反 高
<< 左移


>> 右移
& 按位与
^ 按位异或
| 按位或
表12-2
扩 展 运 算 符 表 达 式 等 价 的 表 达 式
<<= a<<=2 a=a<<2
>>= b>>=1 b=b>>1
&= a&=b a=a&b
^= a^=b a=a^b
|= a|=b a=a|b
【说明】
位运算符中,只有“反求”(~)是单目运算符,即要求运算符两侧各有一个运算量,其余均为双目运算符。
运算的运算对象只能是整形或字符型数据,不能是其他类型的数据,在VC 6.0中整形数据占4个字节,字符型数据占1个字节。
参与运算时,操作数都必须首先转换成二进制形式,然后再执行相应的按位运算。
各双目运算符与赋值运算符结合可以组成扩展的赋值运算符,见表12-2.

12.2 位运算符详解
12.2.1 按位与运算
按位与运算“&”的运算格式:
操作数1&操作数2
【说明】
其中“操作数1”和操作数“2”必须是整型或字符型数据。
按位与运算规则是:当参加运算的2个二进制数的对应位都为1,则该位的结果为1,否则为0,即0&0=0,0&1=0,1&0=0,1&1=1。
【例如】
4&5的运算如下:
00000100 (4)
(&) 00000101 (5)
00000100 (4)
因此,4&5的值为4。
可以利用按位与运算来实现一些特定的功能,下面介绍几种常见的功能。
清零
如果想将一个数的全部二进制置为零,只要找一个二进制数,其中个个位要符合以下条件:原来的数中为1的位,新数中相应的位为0。然后使二者进行按位与运算即可达到清零的目的。

【例如】
原有数为171,其二进制形式为10101011,另找一个数,设它为00010100,它符合以上条件,即在原数为1的位置上,它的位值均为0。将两个数进行&运算:
10101011
(&) 00010100
00000000
当然也可以不用00010100这个数而用其他数(如01000100)也可以,只要符合上述条件即可。任何一个数与“0”按位于之后的结果为0。
娶一个数中某些指定位
【例如】
有一个两字节的短整型数x,想要取其中的低字节,只要将x与八进制数(377)8按位于即可。如图12-1所示,经过运算“z=x&y”后z只保留x的低字节,高字节为0.

x 00 10 11 00 10 10 11 00
y 00 00 00 00 11 11 11 11
z 00 00 00 00 10 10 11 00
图12-1 取x的低八位数

x 00 10 11 00 10 10 11 00
y 11 11 11 11 00 00 00 00
Z 00 10 11 00 00 00 00 00
图12-2 取x的高8位

如果想取两个字节中的高字节,如图12-2所示只需进行运算z = x &(177400)8。
保留一个数的某些位
要想将哪一位保留下来,就与一个数进行&运算,此数在该位取1。
【例如】
有一数01110100,想把其中左面第1、3、5位保留下来,可以这样运算:
01110100 (十进制数116)
(&) 10101010 (十进制数170)
00100000 (十进制数32)
第2个回答  2011-10-17
是对数据的二进制数进行按位运算的
第3个回答  2011-10-17
int a = 0x0f;
a = a | 0x10;
对a进行或运算,结果为0x8f .
位运算有几种:
或,与,异或
| ,& ,^
第4个回答  2011-10-17
数字逻辑 学过吗 ?
就是二进制的相应运算