问题1:将某整数二进制中的奇数位和偶数位互换
奇偶位交换时,可:
偶数位与0得到奇数位,再左移一位成为目标值的偶数位;
原数字奇数位与0得到偶数位,再右移一位成为目标值的奇数位;
得到的两数字相或,最终得到目标值。
0x55555555 表示 01010101 01010101 01010101 01010101
0xaaaaaaaa 表示 10101010 10101010 10101010 10101010
#define CHA(VALUE) ((VALUE & 0x55555555) << 1) | ((VALUE & 0xaaaaaaaa) >> 1)
int main(){
int a = CHA(10);
printf("%d二进制奇偶位交换后得到%d.\n", 10, a);
system("pause");
return 0;
}
问题2:利用二进制求解两整型的平均值(结果为整型)
求平均值,可以转化为将两数二进制位相同的部分的值加上两数二进制位不同的部分的值除以2。
例如2和8,两数二进制位为:0010 1000。相同为0,不同为1010,除2为5,即2和8的平均值。
int average(int x, int y){
return (x&y) + ((x^y) >> 1);
}
上述问题为目前学习中遇到的二进制相关的问题,如有其它问题可在下面评论,大家一起探讨!(新手一枚O(∩_∩)O~~)