首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >反转Python整数的位

反转Python整数的位
EN

Stack Overflow用户
提问于 2012-10-02 06:20:36
回答 10查看 61.5K关注 0票数 35

给定一个十进制整数(例如,65),如何反转Python中的底层位?也就是说..。以下操作:

代码语言:javascript
复制
65 → 01000001 → 10000010 → 130

这项任务似乎可以分为三个步骤:

将十进制整数转换回二进制representation

  • Reverse
  1. 转换回十进制

第2步和第3步似乎非常简单(请参阅thisthis,因此问题与第2步相关),但我被困在第1步。第1步的问题是检索完整的十进制表示并填充零(即。65 = 01000001,不是1000001)。

我找遍了,但似乎什么也找不到。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2012-10-02 06:26:51

代码语言:javascript
复制
int('{:08b}'.format(n)[::-1], 2)

你可以指定任何填充长度来代替8。如果你想变得更花哨,

代码语言:javascript
复制
b = '{:0{width}b}'.format(n, width=width)
int(b[::-1], 2)

允许您以编程方式指定宽度。

票数 53
EN

Stack Overflow用户

发布于 2014-01-04 16:04:33

如果您追求更高的速度,可以使用http://leetcode.com/2011/08/reverse-bits.html中描述的技术

代码语言:javascript
复制
def reverse_mask(x):
    x = ((x & 0x55555555) << 1) | ((x & 0xAAAAAAAA) >> 1)
    x = ((x & 0x33333333) << 2) | ((x & 0xCCCCCCCC) >> 2)
    x = ((x & 0x0F0F0F0F) << 4) | ((x & 0xF0F0F0F0) >> 4)
    x = ((x & 0x00FF00FF) << 8) | ((x & 0xFF00FF00) >> 8)
    x = ((x & 0x0000FFFF) << 16) | ((x & 0xFFFF0000) >> 16)
    return x
票数 9
EN

Stack Overflow用户

发布于 2016-06-02 06:07:34

代码语言:javascript
复制
def reverse_bit(num):
    result = 0
    while num:
        result = (result << 1) + (num & 1)
        num >>= 1
    return result

我们实际上不需要将整数转换成二进制,因为在Python中,整数实际上是二进制的。

反转的想法就像在空间中对整数进行反转。

代码语言:javascript
复制
def reverse_int(x):
    result = 0
    pos_x = abs(x)
    while pos_x:
        result = result * 10 + pos_x % 10
        pos_x /= 10
    return result if x >= 0 else (-1) * result

对于每个循环,原始数字将丢弃最右边的位(以二进制表示)。当添加新的位时,我们在下一个循环中得到最右边的位并乘以2 (<<1)。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12681945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档