所以我遇到了一个编码问题,程序要求我反转二进制的每一位,例如,常规反转将是这样的: 10 = 00001010 反过来是 11110101 = 245,很好地实现这一点,在我看来,我可以将它与 255 进行异或。
但真正的问题是他们只要求反转它直到最后一个“1”。我的老师教我从右开始写二进制,所以如果数字是 10,最后一个“1”就是 2^3。
所以 10 = 1010 反过来就是 0101 = 5
另一个例子是
5 = 00000101 -> 只取最后一个“1”,即 2^2 所以就像忽略这个 ->[00000],只使用这个 ->[101]
所以现在 5 = 101 反转将是“010”,等于 2
我想知道是否有任何方法可以帮助我实现这个结果,起初我想到使用像这样的循环:
for(int i = 7; i >= 0;i--)
并将索引存储到一个 char 来表示二进制文件,并尝试从那里反转它,但当我看到约束是 n 时我很快停止<= 1000000
如何解决这个问题?
您所说的“最后”位通常称为“最重要位”——与此名称不会混淆。
n = (int)log2(i - 1.0) + 1
mask = (1 << (n + 1)) - 1
i ^= mask