交替按位拼接我想连接两个整数A,B用C这样的:用C
如果有位单位表示a_1 a_2 a_3 a_4...
和B具有逐位表示b_1 b_2 b_3 b_4...
我希望我的结果为a_1 b_1 a_2 b_2 a_3 b_3 a_4 b_4
。
例如:A = 5 = 0101
,B = 9 = 1001
然后我的结果应该是01100011
。有没有一种(简单)的方式来做到这一点在C?
编辑:解决了它的“Interleave bits显而易见的方式”从评论Twiddling黑客。我将两个uint32_t合并为一个uint64_t。使用它是为了合并两个流,但是有一个限制,即如果两个不同的值对彼此接近,合并的值也应该有一个小的差别。
有一个直接的**方法:确定每一个位(带有一个移位的1位掩码的'&&)并转入你的结果。尽管这并不“简单”。这个练习的目的是什么?也许有更好的方法来解决导致这个想法的问题? –
就我个人而言,我会写一个“填充函数”,它会产生'a_1 0 a_2 0 a_3 0 a_4'等等。在你的两个数字上调用它,进一步抵消其中的一个和'|'以得到结果。 – Bathsheba
你打算怎么做溢出?直到你定义,没有解决方案是可能的。 –