C++位操作技巧

11 篇文章 0 订阅

一、注意事项:

a、与:&,两位都为1,才为1;

b、或:|,两位都为0,才为0;

c、微操作只能用于整形数据,float和double进行位操作时编译器会报错;

d、异或:^,两位相同为0,不同为1;

e、取反:~,1变为0,0变为1;

f、左移:<<,各二进制全部向左移位,高位丢失,低位补零;

g、右移:>>,各二进制全部向右移位,对于无符号数,低位丢失,高位补零;有符号数个编译器不同,有的补符号位,有的补0;

二、技巧用途:

1、判断奇偶:

只要判断二进制最末尾是0还是1即可判断,为0则是偶数,为1则为奇数;因此用if(a & 1) == 0代替if(a%2 == 0)来判断a是不是偶数。

输出1到100所有的奇数:

if(i = 0; i < 100; i++)
    if(i&1)
        printf("%d ", i);
2、交换两个数(整形的)

void swap(int &a, int &b){
    a ^= b;
    b ^= a;
    a ^= b;
}
3、变换符号:

整数变复数,复数变正数;操作是,对整数取反加1;

int signlReverse(int a){
    return ~a + 1;
}
4、求绝对值:

方法一:

int abs(int a){
    int i >> 31;//获取符号位,a为正数i为0,a为负数i为-1
    return i == 0 ? a : (~a + 1);//i为零表示正数直接返回a,为-1表示负数,返回其相反数;
}
方法二:

int abs(int a){
    int i >> 31;//获取符号位,a为正数i为0,a为负数i为-1
    return ((a^i) - i);//如果a为正数,则i=0,a^i的值不变(任何数和0异或都不变),-i后a不变,返回a;如果a为负数,则i=-1(即0xFFFFFFFF),a^i相当于给各位取反,在-i则相当于+1,返回a的相反数;
}






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值