【问题标题】:What's the best way to flip a single bit in a bitstring?在位串中翻转单个位的最佳方法是什么?
【发布时间】:2019-01-14 02:01:58
【问题描述】:

比如说,你有一个代表一个 8 位字节的 8 个字符的字符串;即'00000000' (0) 并且您想要翻转一个位,使其成为'00010000' (16)。最好或最优雅的方法是什么?

【问题讨论】:

  • 使用int 代替str?如果您必须使用str,则转换为int 并返回仍然是最直接的,因为带有文本01 的逻辑不如使用实际位简单。
  • 使用蝴蝶的翅膀。 xkcd.com/378
  • 这里没有任何令人满意的方法,因为字符串是不可变的。最好使用提供新类型的库,例如 bitstringbitarray(如果您想要高级便利)或只使用整数(如果您想要速度)。
  • "Bitstring" 并不意味着“字面上是一个字符串”,因为它里面有字符串这个词。这是一种更高级别的讨论方式,无论您选择实现它们。一个实际的字符串可以作为实现,但它不是很好。

标签: string python-3.x bit-manipulation bits bitstring


【解决方案1】:

当谈到位操作时,在第 n 个位置翻转单个位的经典方法是

x ^= 1 << n

XOR 1 总是翻转位。 但是如果你使用字符串,那么每个字符都不是位,而是整个字节。因此,您可以尝试使用 XOR 1 并将新符号插入回字符串中来尝试字符串到整数的转换。或者只是使用 if-else 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2018-10-07
    • 1970-01-01
    • 2010-10-26
    相关资源
    最近更新 更多