位运算

位运算常见用法小结

#位运算基本操作符:
|或
&与
^异或
~取反
12.26所学:
1.位运算求绝对值abs()
原理阐述:对于一个正数而言,返回自己即可,对于负数,二进制表示为补码形式,补码形式又是等于反码形式加一
00000…0011表示3
11111…1100+1 表示-3
即1111…1101 所以负数取反后加一即可

int abs(int a)
{
   
	return (a<0? (~a+1):a);
} 

2.位运算交换两值
//位运算交换两个数值

void swap(int& a,int& b)
{
   
	a=a^b;
	b=a^b;
	a=a^b;
}

这个我直接记忆"aba等",一句话的事儿(原理不懂的话举几个栗子,就明白了).

3.位运算判断奇数偶数
规律:当一个数为奇数时,他的最后一位总是1(自己想想是不是这样的?),当它是偶数时,他的最后一位是0,那么我们通过将这个数字与1做与运算来判断他到底是奇_偶数?

//位运算判断奇数偶数,这里假设奇数返回为true,偶数返回false 
bool ji_ou(int a)
{
   
	return (a&1==1?true:false) ; 
}

4.找出唯一成对的数
Problem:
1-1000这1000个数放在含有1001个元素的数组中,只有唯一的一个元素值重复,其他均只出现一次。设计一个算法,将它找出来,你能否设计一个算法实现?
思路一
桶排序思想,开数组,空间为1001,依次填入,检验元素个数,当元素个数为二时返回
思路二(位运算精髓)

#include<cstdio> 
#include<stdlib.h> 
using namespace std;
int main()
{
   
	int result;
	int N=11; 
	int *given;
	given=(int*)malloc(sizeof(int)*N);
	for
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shallow_Carl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值