C语言之6种位操作的运算符

& 按位与、| 按位或 、^ 按位异或、~ 取反运算、<< 左移、>> 右移

1、& 按位与

当两个相应的位进行与运算,则遵循有0得0,全1得1的原则。举个例子,如:

1010

0110

将上面两个进行按位与运算,得 0010

2、| 按位或

当两个相应的位进行或运算,则遵循有1得1,全0得0的原则。举个例子,如:

1010

0110

将上面两个进行按位或运算,得 1110

3、^ 按位异或

当两个相应的位进行按位异或运算,则遵循相同得0,不同得1的原则。举个例子,如:

1010

0110

将上面两个进行按位异或运算,得 1100

4、~ 取反运算

当对一个数的位进行反运算,则遵循遇0得1,遇1得0的原则。举个例子,如:

1010

将上面这个数进行按位取反运算,得 0101

5、<< 左移

当对一个数的位进行左移运算,是指将该数每一个位相应的向左移一位,最后一位补0。举个例子,如: 1010

将上面这个数进行左移运算,得 0100

再比如, 1<<3,首先在计算机中,将1表示成二进制数(通常为4字节表示,即共32位),那么1就表示成 0000 …… 0000 0001 ,将其左移3位,得 0000 …… 0000 1000 ,变成十进制数就是8,即1<<3=8

再比如,-8<<3,首先将-8表示成二进制数,这里简单复习一下,将负数转换成二进制数,就是将该数的正数,用二进制表示,然后对其所有位取反之后再加1,便得到该负数的二进制形式(其实也就是它的补码形式)。

那么-8的正数8,表示成0000 …… 0000 1000

取反得1111 …… 1111 0111

然后加1得1111 …… 1111 1000 (这个便是-8的二进制数表示形式)

然后左移3位得1111 …… 1100 0000 (转换为十进制得-64)

6、>> 右移 (同理)

举个例子,如: 1010

将上面这个数进行左移运算,得 0101

注意:如果是正数,右移和左移操作是一个道理,空出的位补0即可,但是如果是负数,那么 右移时空出的所有位用符号为填补。

举个例子,-8>>3

首先将-8表示成二进制数:1111 …… 1111 1000

然后右移3位得1111 …… 1111 1111 (故-8>>3=-1)

补充:

复合运算符 |=、&=

|=:如A|=B等价于A=A|B,即A和B先进行按位或运算,然后把结果赋给A

&=:如A&=B等价于A=A&B,即A和B先进行按位与运算,然后把结果赋给A

  • 16
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值