C语言下的位运算

简介

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算是直接对整数的二进制位进行操作,简便高效。

下表列出了C语言的位运算符

名称运算符含义
按位与a & b仅1 & 1 == 1
按位或a | b仅0 | 0==0
按位异或a ^ b对应数位上的数相同为0,不同为1
按位取反~a0和1全部取反
(注意有符号数和无符号数的区别)
左移a << ba乘以2的b次方
带符号右移a >> b相当于a除以2的b次方(取整)
位运算的简单使用
  • "&"运算常用于二进制取位操作
num & 1;//取num的最后一位,可判断num的奇偶,远快于num mod 2
num & 3;//取num最后两位
  • " | " 运算常用于二进制特定位上的无条件赋值
num | 1;//把num最后一位变为1
num | 1 -1;//把num最后一位变为0
num | 0b100;//num第3为变为1
  • " ^ " 常用于对二进制的特定一位进行取反操作
    " ^ " 的意义 :是不是不一样
    0和1异或0都不变,异或1则取反
num == num^a^a;//两次异或同一个数最后结果不变,可用于简单加密
c=c^32;//若字母c大写则变为小写,小写变为大写//异或1取反
int a,b;//不使用第三变量,位运算交换两个值
a=a^b;
b=a^b;//b==a
a=a^b;//a==b
  • "~"运算是把内存中的0和1全部取反。需要注意整数类型是否是有符号数
unsigned int num;//32bit
num=100;
num=~num;//num=2^32-1-num;无符号数取反得到的值是它与该类型上界的差
-num=(~num)+1;


无符号数与有符号数均满足
unsigned char a;
~a+1 == -a;

int num;
-num=(~num)+1;

">>"表示把a转为二进制后左移b位(在后面添b个0)即乘以2^b

"<<"表示把a转为二进制后右移b位 (去掉末尾b位) 即除以2^b取整

将高频乘除法替换为位运算,一般可提高算法效率


2018/5/20

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值