翻转整数中的一位随机位

发布于 2025-01-15 01:04:18 字数 489 浏览 1 评论 0原文

我想翻转整数中的一位。所以我必须将整数转换为二进制,然后翻转一个随机位,然后将其转换回整数。我怎么能这么做呢?

# what I want to get:
# num = 8 ... 1000
# new_num = flip_one_bit(num)
# it flips one random bit in 1000 -> 0000 or 1010 or 1100, ...
# returns back it's decimal value 0000 = 0; 1010 = 10
from random import randint

def flip_one_bit(num: int) -> int:
    b_num = bin(num)
    # flip one bit than convert back to integer
    return b_num

附带问题:有没有办法将二进制转换为整数而不构建我自己的函数(任何内置函数)?这样做的“好方法”是什么?

I would like to flip one bit in integer. So I have to convert integer to binary, than flip one random bit and than convert it back to integer. How could i do that?

# what I want to get:
# num = 8 ... 1000
# new_num = flip_one_bit(num)
# it flips one random bit in 1000 -> 0000 or 1010 or 1100, ...
# returns back it's decimal value 0000 = 0; 1010 = 10
from random import randint

def flip_one_bit(num: int) -> int:
    b_num = bin(num)
    # flip one bit than convert back to integer
    return b_num

Side question: Is there any way to convert binary to integer without building my own function (anything built-in)? What's the "good way" of doing this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月亮是我掰弯的 2025-01-22 01:04:18

无需使用字符串:

import random

number = 8

print("Before:\n{} {}\n".format(number, bin(number)))

# flip a single bit
number ^= 1 << random.randint(0, number.bit_length()-1)

print("After:\n{} {}".format(number, bin(number)))

No need to work with strings:

import random

number = 8

print("Before:\n{} {}\n".format(number, bin(number)))

# flip a single bit
number ^= 1 << random.randint(0, number.bit_length()-1)

print("After:\n{} {}".format(number, bin(number)))
转身以后 2025-01-22 01:04:18

您可以将 intbase 参数一起使用,将二进制字符串转换为其相应的 int。

>>> import random
>>> def flip_one_bit(num: int) -> int:
...     b_num = bin(num)[2:]
...     flip = random.choice(range(len(b_num)))
...     b_num = b_num[:flip] + str(int(not int(b_num[flip]))) + b_num[flip+1:]
...     return int(b_num, base=2)
...
>>> flip_one_bit(1)
0
>>> flip_one_bit(0)
1
>>> flip_one_bit(4)
5
>>> flip_one_bit(4)
5
>>> flip_one_bit(4)
6
>>> flip_one_bit(4)
0

You can use int with a base parameter to convert a binary string to its corresponding int.

>>> import random
>>> def flip_one_bit(num: int) -> int:
...     b_num = bin(num)[2:]
...     flip = random.choice(range(len(b_num)))
...     b_num = b_num[:flip] + str(int(not int(b_num[flip]))) + b_num[flip+1:]
...     return int(b_num, base=2)
...
>>> flip_one_bit(1)
0
>>> flip_one_bit(0)
1
>>> flip_one_bit(4)
5
>>> flip_one_bit(4)
5
>>> flip_one_bit(4)
6
>>> flip_one_bit(4)
0
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文