C 如何交换位位置值12 34 56 78?

C 如何交换位位置值12 34 56 78?,c,C,例如:如二进制值1010,则在交换对位位置值0101后,您可以使用上述方法来移位位。如果您想将奇数位交换为偶数位,如交换对位1 2、3 4、5 6和7 8 unsigned char swapped = ((original & 85) << 1) | ((original & 170) >> 1); 无符号字符a,x,y,z; a=2+4+8+128; x=a&170; y=a&85; z=x>>1 | y 其中x在数字中。您希望结果是87654321

例如:如二进制值1010,则在交换对位位置值0101后,您可以使用上述方法来移位位。

如果您想将奇数位交换为偶数位,如交换对位1 2、3 4、5 6和7 8

unsigned char swapped = ((original & 85) << 1) | ((original & 170) >> 1);
无符号字符a,x,y,z; a=2+4+8+128; x=a&170; y=a&85; z=x>>1 | y
其中x在数字中。

您希望结果是87654321还是21436587?我需要交换一对位位置,就像交换第一位和第二位位置值的对一样,类似于位位置34、56、78、+1。非常简单的代码,使用了相当清晰的技术。作为可移植性注意事项,某些编译器可能会使用范围足够大的int,这段代码将导致int被截断。请注意,将有符号整数右移将传播符号位。这意味着如果a为负,结果的第一位将为1,而不管第二位是什么!我怀疑你想要的是无符号int,也就是说,你感兴趣的是位模式,而不是它们在2的补码中表示的值。如果你真的,真的需要一个整型,你可以简单地动态地强制转换它:a&0x555555>1或者手动清除它:a&0x555555>1&0x7FFFFFFFAlso请注意,这只适用于32位的整型。如果整型是64位的,那么把L放在末尾是没有帮助的!
int pairwise_bit_swap(int a) {
    return ((a & 0x55555555L) << 1) | ((a & 0xAAAAAAAAL) >> 1);
}
((x << 1) & 0xAAAAAAAA) |( (x >>1) & 0x55555555)