二进制的使用Using Binary

本文详细解读了位运算符如按位与(&), 按位或(|), 按位异或(^), 和左移(>>)在判断奇偶性、二进制位操作及状态转换中的应用,展示了如何用位运算实现类似‘二进制迭代器’的功能,以及如何用它们来处理符号整数状态的逐位展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

>n & 1

        >检查n最后一个二进制位

        >判断n是否为奇数,(判断偶数:n &1^1)

 >n >> i & 1

        >判断n的二进制第 i+1 位是否为1

        >例如:搜索状态state二进制的每一位

>n &= n-1

        >将n的二进制最前面(最右边)的为1的一位置零(n != 0)

>n & 0

        >将第一个二进制位 置0

//设 状态state为32位符号整数数的最大值
//程序将输出:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
int state = 2147483647;
int digit = 31;            //表示32位符号整数的最大位数,即31

for(int i=0; i<digit; i++)
    if(state >> i &1)
        cout<<i+1<<' ';

        Tips:使用到的位运算优先级:>>,  &,  ^,  |

>n | 1

        >将n第一个二进制位 置1

>n |= 1 << i

        >将第i+1个二进制位 置1

int set1(int &x, int i){
	return x |= 1<<i-1;
}

(位运算里经常出现 “x>>i-1” 或 “ 1<<i - 1 ” 的形式,通过它可以判断或修改二进制数的每一位的“取值”,那么我们是否可以称之为 “二进制的迭代器” ?)

>n | 0

        >保留第一个二进制位

>n ^ 1

        >n第一个二进制位取反

        >可用于某数的第i位取反

int rev(int &x, int i){
	return x ^= 1<<i-1;
}

>n ^ 0

        >保留第一个二进制位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

travis_acl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值