位运算符

本文数据均为二进制数据

位运算符通过对于二进制每一位数的直接运算达到对于位的单独操纵的目的。
C中提供按位逻辑运算符和移位运算符。按位运算符,是因为它的操作是都是对于每个位进行,不影响它左右两边的位,与常规逻辑运算符不同的是常规逻辑运算符操作的是整个值

1. 按位与:&

二位按位运算符与"&"是通过逐位对比两个运算对象,生成一个新值。
它的运算过程是对比每一个位,当相应位的都为1的时候,结果才为1,否则为0(即两个对象中相应位任意位为0,该位运算为0 例00001001&00001010=00001000)

#include<stdio.h>
#define MASK 1 /*定义符号常量MASK=1*/
int main(void)
{
int i=1,j=0;
i&=MASK;
j&=MASK;
return 0;
}

最终 i 的结果是1,j的结果是零。
对于“&”,可以用来判断奇偶。或者用来对某些位进行遮掩,达到掩码的作用。
对于检查某位值时,可以先覆盖其他的值,然后进行比较。

if((i&1)==1)/*i是奇数,结果为真,i是偶数,结果为假*/

2.按位或: |

二元运算符或“|”是逐位进行对比,当相应位任意一方为1时,结果就为1(一真即真的感觉)
对于某些需要进行单独打开的位可以进行运算
即00001001|00000110=00001111

例如需要单独开启 i 的第二位,可以进行运算:i|00000010

3.按位异或:^

按位异或运算符通过逐个比较对象,当两个对象相应位有一个为1,则结果为1,若是都为零或是都为1,则结果为0。
例如:10011001^10001011=0001010
可以对需要的某个位进行切换。

4.按位取反:~

按位取反运算符为一元运算符,将运算对象的每一位进行取反运算,例如0变为1,1变为0.
运算符并不改变对象本身的值

Vau=00001111;
~Vau=11110000;
但是Vau的值并未改变,仍然为00001111;

取反运算符可以实现循环中连续输入

while(~scanf("%d",&n))

因为当数据输入错误是scanf()函数返回-1,而~-1=0,所以终止循环,正确输入时可进行连续输入。

5.按位移位运算符

左移 :<<

将其左侧运算对象进行运算,将每一位的值向左移动右侧指定的位数。
左侧运算对象左侧移除值丢失,而右侧的用零补足空位。
此为一元运算符,并不对运算对象本身的值产生改变
运用此运算符 number<<n 可视为number乘以2的n次幂

右移:>>

将其右侧运算对象进行运算,每一位值向右移动右侧指定位置。、
移出右侧的某位的值丢失。
(对于无符号值的类型,用0填补空位;有符号类型的取决于系统,可用0或者用符号值的方式填补)
运用此运算符 number>>n 可视为number除以2的n次幂

按位移位运算符可以对于某项储存几个信息的数据进行信息分类处理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值