如何交换给定整数 {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?
最佳答案
如果允许重叠,则该算法必须是有损算法。
从你的例子:
01110101 00110000
| |
101 001
| |
110101
如果交换它们,则值为:
01110101 00110000
| |
110 101
*** - Mismatch!
| |
101001
*** - Mismatch!
无论如何,如果你允许重叠,你不能保证在进行交换后得到相同的原始值。
解决这个问题的两种方法:
- 记录您的函数是有损的,并且您不能保证您将能够提取交换的位。
我不喜欢这个想法,因为我不知道我会用这样的算法来做什么 - 如果将重叠输入算法,则抛出异常,并以不产生重叠的方式编写使用该算法的程序。
关于c# - 按位交换操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8164771/