举例:如1001,奇偶位互换之后是0110;
第一步
分别将该整数与0101和1010相与,即分别保留奇数位和偶数位(因为只有当两个1相与才为1,0与0或1相与都是0)
简短来说就是保留奇数位,保留偶数位,奇数位左移,偶数位右移,二者再异或。
(图上传不了了,,,)
核心代码:
int x = (i&0xaaaaaaaa);
int y = (i&0x55555555);
return (x>>1)^(y<<1);
(十六进制的a为1010,十六进制的5为0101)
举例:如1001,奇偶位互换之后是0110;
第一步
分别将该整数与0101和1010相与,即分别保留奇数位和偶数位(因为只有当两个1相与才为1,0与0或1相与都是0)
简短来说就是保留奇数位,保留偶数位,奇数位左移,偶数位右移,二者再异或。
(图上传不了了,,,)
核心代码:
int x = (i&0xaaaaaaaa);
int y = (i&0x55555555);
return (x>>1)^(y<<1);
(十六进制的a为1010,十六进制的5为0101)