将数字打包成一个位集(python,按位操作)

2024-05-08 22:56:21 发布

您现在位置:Python中文网/ 问答频道 /正文

PIC微控制器有一个非常简单的指令集格式。每一条指令的长度正好是14位,由不同位长度的各种数字组成。在

我正在尝试构建一个函数,它可以接受所有这些输入,并构建一个表示该指令的数字。在

Instruction set format

这就是我一直在努力的工作:

def fileRegOp(opcode, d, f):
    out =  opcode << 13
    out = out | d << 7
    out = out | f
    return out

print "FIN:", bin(fileRegOp(1,True,15))

It输出

FIN: 0b10000010001111

这看起来不错,只是有些地方绕错了方向。我想应该是:

FIN: 0b00000111111000

我已经看到了解决方案,其中包括循环来翻转位,但我相信还有更好的方法。在

写这个函数最优雅的方法是什么?在

有关指令集的详细信息:Datasheet请参阅第121122页


Tags: 方法函数returndef格式指令数字out
1条回答
网友
1楼 · 发布于 2024-05-08 22:56:21

你的班次错了。在

你是在按最上面一位的索引来移动,这是不对的。必须按每个字段中最下面(最右边)位的索引进行移位。在

所以应该是:

def fileRegOp(opcode, d, f):
  return (opcode << 8) | (d << 7) | f

通过一些编辑,在左侧添加填充零:

^{pr2}$

当然,也可以限制检查参数。在

相关问题 更多 >