位运算——用法和技巧总结

6 篇文章 0 订阅
5 篇文章 0 订阅

位运算


目录

  • 运算符大全
  • 常用技巧

一、运算符大全

注:以下操作数是整数型或者字符型

  • 符号名称定义记忆规律
    <<按位左移操作数每向左移一位,符号位后的最高位都将被移出,右端补零。(可能会溢出)左移a位,操作数变成原来的2^a倍
    >>按位右移操作数每向右移一位,最右端的移位都将被移出,左端补零。右移b位,操作数变成原来的1/2^b倍
    ~按位取反将操作数的二进制按位取反。0变1,1变0
    &按位与两个操作数均为1时结果为1,其余情况结果为0全1为1,其余为0
    |按位或两个操作数有一个为1结果为1,其余情况结果为0有1为1,其余为0
    ^按位异或两个操作数有一个为1,另一个为0时结果为1,其余情况为0不同为1,相同为0

二、常用技巧

1、判断奇偶性:奇数:n & 1 == 1;偶数n & 1 == 0
bool isOdd(int n){
    if((n & 1) == 1){	//只判断二进制数最后两位即可
        return true;	//奇数
    }
    else {
        return false;	//偶数
    }
}

2、a^b^b 等于 a 找出只出现一次的数时有用

3、判断是否是2的幂 :2的幂:n & (n-1) == 0

boolean isFactorialofTwo(int n){
	return n > 0 ? (n & (n - 1)) == 0 : false;
    // 2的幂有1,2,4,8,16... 对应二进制1,10,100,1000,10000...
}

4、消去X对应二进制数中最右端的1

int a=0b11010100;	//0b表示二进制数
stack<int> xx;
a&=a-1; 	//a=a & (a-1)
while (a){
    xx.push(a%2);
    a/=2;
}
while (!xx.empty()){
    cout<<xx.top();
    xx.pop();
}
//结果:11010000     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值