【位运算】1

阅读: 评论:0

【位运算】1

【位运算】1

题目描述:给定一个正整数,找出与其二进制表示1的个数相同、略大和略小的2个数

# 获取略大的数
def getNext(num):# n是为了统计出p和c1、c0n = numc1 = 0c0 = 0while n&1 == 0 and n != 0:c0 += 1n >>= 1while (n&1) == 1:c1 += 1n >>= 1p = c0+c1# 类似于11111……0000这种输入和全0的输入if p == 31 or p == 0:return 'error'num |= 1<<p # 将p位翻转为1num &= ~((1<<p)-1) # 将p位后的清零,注意不能直接与1<<p,因为这样前面的都置为0num |= (1 << (c1-1)) - 1 # 将最后几位填成1return num
# 获取略小的数
def getPrev(num):n = numc1 = 0c2 = 0while n&1 == 1:c1 += 1n >>= 1# 判断全0或者全1的情况if n == 0:return 'error'while n&1 == 0 and n != 0:c0 += 1n >>= 1p = c0+c1# 将p位及以后的置0num &= (~0<<(p+1))# 在p后面放c1+1个1mask = (1<<(c1+1))-1num |= mask << (c0-1)return num

 

本文发布于:2024-02-02 17:32:31,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170686635245353.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23