鱼C论坛

 找回密码
 立即注册
查看: 1392|回复: 0

[技术交流] 位运算的二三栗子

[复制链接]
发表于 2019-11-28 12:27:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一:
判断整数的奇偶性
偶数:(2N) & 1 = 0;
奇数:(2N-1) & 1 = 1;
整数特性:
奇数二进制最低位是1;
偶数二进制最低位是0;

二:
交换两个变量a, b的值
#include <iostream>
int main(int argc, char const *argv[])
{
    int a = 5,b = 90;
    a = a^b;
    b = a^b;
    a = a^b;
    std::cout<<a<<" "<<b;
    return 0;
}
----------------------------------------------
90 5
E:\Users\admin\Documents\VScode\Code>
==============================================
三:
消除数组中重复的整数a
使用特性
a ^ a = 0
a ^ 0 = a  
==============================================
四:
判断整数的二进制中1的个数,当只有一个是1这个整数是2的整数次方
使用特性
1 & 1 = 1;

>>移动逐位比较
#include <iostream>
int main(int argc, char const *argv[])
{
    int count = 0;
    int a = 10, t= 0, b = 1;
    for (size_t i = 0; i < 32; i++)
    {
        if (((a>>i)&1) == 1)
        {
            count++;
        } 
    }
    std::cout<<count;
    return 0;
}
或
#include <iostream>
int main(int argc, char const *argv[])
{
    int count = 0;
    int a = 10, t = 0, b = 1;
    while (a != 0)
    {
        a = (a - 1) & a;
        count++;
    }
    std::cout<<count;
    return 0;
}

----------------------------------------------
2
E:\Users\admin\Documents\VScode\Code>
==============================================
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 01:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表