如果我们有两个位间隔的重叠,如何将给定整数{p, p+1, ..., p+k-1}
的位与{q, q+1, ..., q+k-1}
交换;
p和q是位的位置:
p != q; k > 1
。
示例:
p = 5;
q = 8;
k = 6;
16-bits decimal number 30 000 in binary representation:
01110101 00110000
================before exchange============
101 001
110101
================after exchange==============
110 101
101001
============================================
如何确定位的位置8,9和10,要放置哪些位 - 110或001?
答案 0 :(得分:4)
如果允许重叠,算法必须是有损的。
从你的例子:
01110101 00110000
| |
101 001
| |
110101
如果交换它们,则值为:
01110101 00110000
| |
110 101
*** - Mismatch!
| |
101001
*** - Mismatch!
无论如何,如果您允许重叠,则无法保证在进行交换后您可以获得相同的原始值。
解决此问题的两种方法:
答案 1 :(得分:1)
在Java中,您可以使用以下方法检查所需位:
boolean isSet(byte number, int index) {
return (number & (1 << index)) != 0;
}
要构造新字节,您可以使用:Byte.valueOf(string,radix)
此外,当您使用非字节数时,可以使用ByteBuffer(ByteOrder.LITTLE_ENDIAN / ByteOrder.BIG_ENDIAN)更改字节顺序