【问题标题】:how to toggle the bits of binary representation of a number? [duplicate]如何切换数字的二进制表示的位? [复制]
【发布时间】:2018-06-23 22:31:20
【问题描述】:

给定一个数字,我想切换数字“n”的位
例如,如果 n = 6 -> 0110
我想得到,结果 = 9 -> 1001
切换,即
在二进制表示中将 1 转换为 0 并将 0 转换为 1
如何在 Java 中以编程方式执行此操作,方法是将 num 与 1 进行异或
感谢大家的回答,所以这取决于我要切换多少位
例如,如果它是 8 位,那么 0xff
如果它的整个 32 位那么 oxffffffff
一种方式是n ^ ~0

【问题讨论】:

  • @OldCurmudgeon 这很明显不是逻辑排他运算符。你能找到一个实际重复的问题吗?
  • 我举了一个例子,但这也取决于你想要切换多少位。例如,在您的示例中,您将其限制为 4 位。你想使用一个完整的整数吗?
  • @src3369 我同意它不是重复的,也不应该被标记为这样,但是,尽管如此,它的措辞方式,这个问题太微不足道了。这类似于“我知道加号 (+) 运算符的作用,但我如何使用它将两个数字相加?”如果你可以改写问题来解释究竟是什么导致了困难,它可能会得到更有意义的答案。
  • 也许你想要补码:~6 == 0b111...111001 == -6-1 == -7`。

标签: java bit-manipulation


【解决方案1】:

你完全可以这样做。

int y = 6^0xf

如果你想使用完整的 int,那么你必须与 -1 进行异或(二进制补码意味着这全是 1)。

int y = 6^-1;

您还可以使用不同的表示形式使其更直观。

int mask = 0xffffffff; //also -1

【讨论】:

    【解决方案2】:
       public static void main(final String[] args) {
            final int n = 0b0110;
            System.out.println(Integer.toBinaryString(n));
            final int m = n ^ 0xffffffff;
            System.out.println(Integer.toBinaryString(m));
        }
    

    【讨论】:

    • XOR 将根据 1 的数量给出不同的结果。在 ops 示例中,结果为 9,在您的示例中,您得到 -7。
    猜你喜欢
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 2019-05-14
    • 2010-10-16
    • 2013-05-07
    • 1970-01-01
    • 2018-09-15
    相关资源
    最近更新 更多