[英]Bitwise exchange operations
在有重叠的情况下,如何与{q, q+1, ..., q+k-1}
交换给定整数{p, p+1, ..., p+k-1}
的位两个比特间隔; p和q是位的位置:
p != q; k > 1
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?
如果允许重叠,则该算法必须是有损的。
从您的示例:
01110101 00110000
| |
101 001
| |
110101
如果交换它们,则值为:
01110101 00110000
| |
110 101
*** - Mismatch!
| |
101001
*** - Mismatch!
无论如何,如果允许重叠,则不能保证交换后可以得到相同的原始值。
解决此问题的两种方法:
在Java中,您可以使用以下命令检查所需的位:
boolean isSet(byte number, int index) {
return (number & (1 << index)) != 0;
}
要构造新的字节,可以使用:Byte.valueOf(string,radix)
另外,当您使用非字节数字时,可以使用ByteBuffer(ByteOrder.LITTLE_ENDIAN / ByteOrder.BIG_ENDIAN)更改字节顺序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.