算法通关村第十一关——位运算常用技巧

本文介绍了位运算在计算机中的基础地位,包括与、或、异或、取反等操作,以及左移和右移(算术与逻辑)的区别。重点阐述了移位运算如何实现乘除,并展示了利用位运算的性质进行数据获取、设置、清零和更新的方法。

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

1、位运算是计算机核心的基础,数据的表示和计算基本少不了,两个数字进行可以使用与、或、异或和取反等操作,改变当前数字的值,也可以进行移位计算(左移或者右移),移位计算按照是否带符号可以分成算术移位和逻辑移位。左移运算符号是<<,左移运算时,将全部二进制位向左移动若干位,高位丢弃,低位补0,对于左移运算,算术移位和逻辑移位是相同的。右移运算的符号是>>,右移运算时,将全部二进制位向右移动若干位,低位丢弃高位的补位由算术移位或逻辑移位决定:算术右移时,高位补最高位;逻辑移位时,高位补0。

2、移位运算可以实现乘除操作,计算机底层一切运算都是基于位运算实现的,左移运算相当于乘法操作,左移K位,等价于将这个数乘以2^k,右移运算相当于除法操作,右移K位,相当于除以2^K,结果向下取整。

3、位运算还有很多性质,例如幂等律、交换律、结合律、分配律,德摩根定律、取反运算性质等,也可以利用性质获取、设置和更新某个为的数据,如:

        获取,该方法是是将1左移i位,得到形如00010000的值,接着与num执行“位与”操作,从而获取指定位置的值。

def get_bit(num,i):
    return (num & (1 << i)) ! = 0

        设置,也是将1左移i位,得到形如00010000的值,接着与num执行“位或”操作,这样就可以将指定位置的值设置为1,其余位不变。

def set_bit(num, i):
    return num | (i << i)

        清零,将1左移i位,得到形如00010000的值,再取反得到11101111,接着与num执行“位与”操作,从而获取指定位置的值设为0,其余位不变。

def clear_bit(num, i):
    mask = ~ (1 << i)
    return num & mask

        更新,这个方法是将设置和清零结合,首先将指定为清零,后将需要设置的值左移到指定位置进行“位或”操作。

def update_bit(num, i, v):
    mask = ~(1 << i)
    return (num & mask) | (v << i)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

w黑马王子w

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

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

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

打赏作者

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

抵扣说明:

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

余额充值