位运算的自悟

本文深入浅出地介绍了位运算的基本概念及其应用场景,包括如何通过位运算实现特定位的读写和翻转操作,并提供了丰富的实例帮助理解。

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

口诀:

清零取反要用与,某一位置可用或。
若要取反和交换,轻轻松松用异或。


1.先举个例子,6的二进制是:110 ,所以 在补0 后显示为:0000 0011。

  没错,如你所见,二进制在 补0后 是以 后为前的排序

2.给定整数 n与m. 进行位运算操作:1 << m

  这是个非常 常用的操作,常用于:对n的第m位数进行操作。

  1 << m :可谓是,定位 到 n 的第m位数,然后 n的第m位数,在与 1 进行 位运算操作。


3.基本的位运算操作

先给定整数 n,整数 m(0123...sizeof(int))

1). & :只有对应的两个 二进制数,均为1,结果才为 1,否则为 0

 & 1 :判断 n的第m位数。

 介绍两个重要应用,来证明其含义:

 (n >>m ) & 1 :判断 整数n 的二进制 第m位 是否 为1 或者 为0

 此时,"& 1" 的重要性 就体现出来了,n 的第m位数,如果为1 ,1&1 就返回1 ,如果为0,0&1 就返回0

 所以说,可以利用 &1 来判断 n的二进制数的第m位数情况,为1 还是为0

 并且,还有一个特别重要的应用,n & 1,可以判断 n 的奇偶性 

 毕竟 如果n 为奇数,辗转相除2,最后的余数 必定为1,如果n 为偶数,辗转相除 余数必定为 0

 也就是说,n为奇数,n&1 等价于 1&1 ,返回值 为1,n为偶数,n&1 等价于 0&1,返回值为 0 

 & 0 :将 n的第m位数,重置为0

 基本应用:n & ~(1 << m)

 第一步:1 << m : 定位到 n的第m位数

 第二步:~(1 << m):将1进行非运算,变为 0,其他剩下的m位,变成 1,而 &1,是无实际作用的

 第三步:n & 0 :& 按位与运算:只有对应的两个数 全部为1时,结果才为1,而&0,显而易见,返回值一定为 0

2). | :只有对应的两个 二进制数,均为0,结果才为 0,否则为 1

 | 1 :将 n的第m位数,重置为1

 基本应用:n | (1 << m):

 第一步:1 << m  : 定位到 n 的第m位数

 第二步:n | 1   :n的第m位数 进行 |1 操作 其返回值必定为 1!因为|只有,两个数都为 0时,结果才为 0 

 | 0:一定要清楚, 是 n的第m位数 在进行操作,其他 位数操作,根本无 影响

 因为,其他位数,是 在进行 "| 0" 操作,而所谓的 |0 操作,与 &1 操作,毫无差别,都是无实际作用的

 假设 k=n的第m位数,k = 1 ,k|0 = 1|0 = 1,k = 0,k|0 = 0|0 = 0,所谓 无实际作用就是如此

 但是要注意一点,我说的 0 是在二进制数中的0,有实际含义的 0,不是补 0的0

 所以,可以感性的认识到,| 0 与 & 1 以及 下文的 ^ 0,都是无实际作用的

3). ^ :只有对应的两个 二进制数相等时,结果才为 0,否则为 1

 ^ 1: 将 n的第m位数,取反

 基本应用:n ^ (1 << m)

 第一步:1 << m : 定位到 n的第m位数 

 第二步:n ^ 1,我们要知道,^ (异或):不相等为 1,相等为 0

 而 ^1:如果 n的第m位数 为1,1^1 返回值为 0,如果 n的第m位数 为0,0^1 返回值 为1

 所以,^1 的重要作用,就是 与之相反的作用

^ 0: 与 上文提到的 & 1 ,| 0 相似,都是无实际含义的操作

假定 整数k 为0,k^0 = 0^0 = 0 ; 假定整数k 为1,k^0 = 1^0 = 1

所以说,无论怎么变化,^0 都是无实际作用的

总结:(n >> m) & 1 == (n >> m) | 0 == (n >> m) ^ 0

  n & ~(1 << m) : 将 n的第m位数,重置为 0

  n | (1 << m)  : 将 n的第m位数,重置为 1

  n ^ (1 << m)  : 将 n的第m位数,取其相反
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值