关于C语言中的位运算

   位运算是指按二进制进行的运算。在系统软件中尝尝需要处理二进制位的问题,C语言提供了6个位操作运算符,这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。

1、按位与(&):指参加运算的两个数据按二进制位进行“与”运算。若两个相应的二进制位都为1,则该位的结果值为1,否则为0.这里的1可以理解为逻辑中的true,0可以理解为逻辑中的false.按位与其实与逻辑上的“与”运算规则一致。电脑内存储存数据的基本单位是字节(Byte),一个字节由8个位(bit)所组成。位是用来描述电脑数据量的最小单位。二进制系统中,每个0或1就是一个位。将11(2)补足为一个字节则是 00001011(2)。5的二进制编码补足成一个字节则是 00000101(2),对其二者进行与运算:

00001011(2)

  & 00000101(2)

00000001(2)

由此可知,11&5=1;C语言代码如下:

#include <stdio.h>

int main(int argc,char**argv)

{

int a=8;

int b=5;

printf("%d",a&b);

}

2、按位或(|):两个相应的二进制位中只要有一个为1,该位的结果值为1.借用逻辑数学中或运算的话来说就是,一真为真。

例如:60(8)|17(8),将八进制的60与17进行按位或运算。

00110000

      | 00001111

00111111

C语言代码如下:

#include <stdio.h>

int main(int argc,char**argv)

{

int a=060;

int b=017;

printf("%d",a|b);

}

3、异或(^):其规则是,若参加运算的两个二进制位值不同则结果值为1,否则为0;

例:00111001

      ^00101010

00010011

C语言代码:

#include <stdio.h>

int main(int argc,char**argv)

{

int a=071;

int b=052;

printf("%d",a^b);

}

4、取反(~):这是个一元运算符,用于求整数的二进制反码,这里比较简单就不多说了。

例如:~77(8)

C语言代码:

#include <stdio.h>

int main(int argc,char**argv)

{

int a=077;

printf("%d",~a);

}

5、左移运算符(<<):用来将一个数的各个二进制位左移若干位,移动的位数由操作数指定(操作数必须是非负值),其低位空出的位用0填补,高位左移溢出则舍弃该高位。

例如将a=15,即00001111(2)左移2位得:00111100(2)。

C语言代码:

#include <stdio.h>

int main(int argc,char**argv)

{

int a=15;

printf("%d",a<<2);

}

6、右移运算符(>>):用来将一个数的各二进制位右移若干位,移动的位数由非负操作数指定,移到右端的低位被舍弃,对于无符号数,高位补0。对于有符号数,某些机器将对左边空出的部分用符号位填补(即“算术移位”),而另一些机器则对左边空出的部分用0填补(即“逻辑移位”)。注意,对无符号数,右移时左边高位移入0;对于有符号数,要取决于所用的计算机系统。

例:a的值是八进制数113755,用二进制形式表示为:

a :1001011111101101(2)

 a>>1:  0100101111110110(逻辑右移)

 a>>1:  1100101111110110(算术右移)

C语言程序:

#include <stdio.h>

int main(int argc,char**argv)

{

int a=0113755;

printf("%d",a>>1);

}

    7、位运算赋值运算符

位运算符与赋值运算符可以组成复合赋值运算符。

例如:&=,|=,>>=,<<=,^=

  若 a &= b 则相当于 a = a&b

a <<=2 相当于 a = a<<2



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值