二进制位相关知识

问题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~~)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值