python - 提取十六进制值的第 n 位
问题描述
假设我有一个表示十六进制值的字符串,例如“0x4”,二进制表示为 0100。如果我想测试第 n 位是否设置为 1,以及从最低有效位开始计数的位置(在此示例中意味着只有第 3 位是 1)我怎样才能以最优雅的方式做到这一点?
我怀疑我正在做的方式非常优雅或高效。bits = '{0:08b}'.format(int(0x4, 16)) 然后检查 str(bits[-3]) 是否为“1”
bits = '{0:08b}'.format(int(0x4, 16))
if str(bits[-3]) == "1":
print "Bit is set to 1"
我想要一种巧妙的方法,例如使用按位运算符或移位。
解决方案
要测试是否设置了某个位,请在该位&
的位掩码上按位使用:
>>> bool(12 & 0b0100)
True
要在第 n 个位置设置位掩码,请将 a1
按n-1
位置移位:
>>> n = 3
>>> 1 << n-1
4
>>> bin(1 << n-1)
'0b100'
结合起来,可以直接检查是否设置了特定位:
>>> def bitset(number, n):
... """Test whether ``number`` has the ``n``'th bit set"""
... return bool(number & 1 << n - 1)
...
>>> bitset(0x4, 3)
如果您的输入是一个字符串(而不是从一个整数生成一个字符串),使用int
它来转换它:
>>> bitset(int('0x4', 16), 3)
推荐阅读
- statistics - Z3统计意义
- javascript - 反应中心 div
- javascript - 带有nodejs axios的数组文件下载器和香草javascript中的异步等待模式
- excel - 如何在 VBA 中调用函数/返回值?
- regex - 使用正则表达式捕获不带引号的双引号内的字符串
- c - 如何使用c通过rabbitmq发送和接收protobuf数据
- tensorflow.js - tf 模型无法加载到 tfjs
- sql - 如何从该列中获取年份?(甲骨文顶点)
- arrays - 是否有程序可以创建一个程序来创建另一个程序?
- reactjs - Reactjs 在链接组件中使用状态