mpe*_*pen 2 python binary bit-manipulation
假设我有两个带有以下二进制表示的整数:
01101010
00110101
Run Code Online (Sandbox Code Playgroud)
现在我想复制第一个整数中的最后3位而不是第二个整数
00110010
Run Code Online (Sandbox Code Playgroud)
最简单的方法是什么?
(实际上,我的目标是将所有X + 1位移到右边,基本上删除第X位,并保持X-1位相同 - 在这种情况下,X为4)
"为什么?":
你有一堆旗帜,
1 = 'permission x'
2 = 'permission y'
4 = 'permission z'
8 = 'permission w'
Run Code Online (Sandbox Code Playgroud)
您决定在程序中不再需要"权限y",从而将z和w向上移动(分别为2和4).但是,现在您需要更新数据库中的所有值....(您使用什么公式?)
根据您的python版本,您表达二进制文字的方式会发生变化,请参阅此问题以获取详细信息.
我使用2.5.2,所以我使用了这个:
>>> a = int('01101010', 2)
>>> b = int('00110101', 2)
>>> mask = 07 # Mask out the last 3 bits.
>>> (b & ~mask) | (a & mask)
50
>>> int('00110010', 2)
50
Run Code Online (Sandbox Code Playgroud)
细节:
(b & ~mask) <- This keeps the first n-3 bits. (By negating the 3bit mask).
(a & mask) <- This keeps the last 3 bits.
If you '|' (bitwise OR) them together, you get your desired result.
Run Code Online (Sandbox Code Playgroud)
我在最后一句话中没有理解你的目标,所以我不知道如何解决这个问题:)
| 归档时间: |
|
| 查看次数: |
3730 次 |
| 最近记录: |