我将假设我可以使用 Java 来实现。如果将问题更改为“仅使用位运算符,编写将RIGHTMOST零位设置为 1 的函数”,则可以按如下方式解决问题:
int a = 0b1111_1111_1111_1111_1111_1101_0110_1111;
a = a | (a & (a^(a+1)))+1;
System.out.println(Integer.toBinaryString(a));
这个答案是我们需要的镜像,所以首先简单地镜像输入:
int a = 0b1111_1111_1111_1111_1111_1101_0110_1111;
a = Integer.reverse(a);
a = Integer.reverse(a | (a & (a ^ (a + 1))) + 1);
System.out.println(Integer.toBinaryString(a));
但是,当然,使用一个 Java 内置 ( reverse
),您也有权使用另一个 ( highestOneBit
):
int a = 0b1111_1111_1111_1111_1111_1101_0110_1111;
a = Integer.highestOneBit(~a)+a;
System.out.println(Integer.toBinaryString(a));
如果您想使用基本的按位运算符实现自己的reverse
,并且可能在 c 中实现,那也是可能的:Reverse bits