位运算

位运算

(一)按位与&
(1)去一个数的指定位
n=1010 1100;
n=n&0000 1111;
n=0000 1100;
(2)使一个数的指定位置为0
n=1010 1100;
n=n&1111 0000;
n=1010 0000;
(二)按位异或^
n=1010 1100;
n=n^0000 1111;
n=1010 0011;

(三)按位或 |
n=1010 1100;
n=n|0000 1111;
n=1010 1111;

位运算符图解
这里写图片描述
具体使用部分如下:

求一个数二进制中1的个数

//求一个数的二进制中有多少个1
int one(int x)
{
    int count = 0;
    while(x)
    {
        count ++;
        x = x & (x - 1);
    }
    return count;
}

检验一个数是否为2的N次方

//检验一个数是否为2的N次方
void num(int x)
{
    if(!(x&(x-1)))
        cout<<"true"<<endl;
    else
        cout<<"flase"<<endl;
}

不使用除法符号求两个数的平均值

//不使用除法符号求两个数的平均值
int num(int x, int y)
{
    return (x&y) + ((x^y) >> 1);
}

不使用第三个变量交换a和b(a,b均为int)

//不使用第三个变量交换a和b(a,b均为int)
void swap(int &x,int &y)
{
    x = x ^ y;
    y = x ^ y;
    x = x ^ y;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值