python 怎么讲数字按位取_将数字打包到一个位集中(python,按位操作)

The PIC microcontroller has a dead simple instruction set format. Each instruction is exactly 14 bits long, composed of a variety of numbers at differing bit lengths.

I am trying to build a function that can take all these inputs and build a number that represents that instruction.

This is what I have been trying to get working:

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 outputs

FIN: 0b10000010001111

Which looks good, except the bits are the wrong way round. I think it should read:

FIN: 0b00000111111000

I've seen solutions on SO that involve loops to flip the bits around, but I'm sure there's a better way.

Whats the most elegant way to write this function?

More detail on the instruction set: Datasheet see page 121,122

解决方案

Your shifts are wrong.

You are shifting by the index of the top-most bit, which isn't right. You must shift by the index of the lowermost (rightmost) bit in each field.

So it should be:

def fileRegOp(opcode, d, f):

return (opcode << 8) | (d << 7) | f

This gives, with some editing to add padding zeros on the left:

>>> bin(fileRegOp(1,True,15))

'0b00000110001111'

Of course, it might be sensical to also limit-check the arguments.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值