当前位置: 首页 > news >正文

关于位运算的一些小记

目录

1.判断一个整数是不是2的幂

2.判断一个整数是不是3的幂

3.大于n的最小的2次幂的数

4.交换两个数

 5.找到1-n中缺失的数字

6.判断数组中2个出现次数为奇数的数

6.求给定范围内所有数字&的结果

7. 求出现次数少于m的数 


1.判断一个整数是不是2的幂

 提取出二进制里最右侧的1

bool is_mi(int n){//注意运算符的优先级,这里要加括号 return n>0&&n==(n&(~n+1));
}

2.判断一个整数是不是3的幂

如果一个数字是3的次幂,那么这个数一定 只含有3的这个质数因子,1162261467是int范围内最大的3次幂,如果1162261467%n!=0那么就不是3的次幂

bool is_mi(int n){return n>0&&1162261467%n==0;
} 

3.大于n的最小的2次幂的数

如果n是负数直接返回1,否则的话进行位运算的操作

int  mi(int n){if(n<0)return 1;n--;n|=n>>1;n|=n>>2;n|=n>>4;n|=n>>8;n|=n>>16;return n+1;
}

4.交换两个数

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

 5.找到1-n中缺失的数字

int missing(int n,int a[]){int x=0;for(int i=0;i<n;i++){x^=i;x^=a[i];}x^=n;return x;
} 

6.判断数组中2个出现次数为奇数的数

void que2(){
int x=0;
for(int i=0;i<12;i++)
x^=a[i];
int y=x&(~x+1);
int x1=0;
for(int i=0;i<12;i++){if((a[i]&y)==0)x1^=a[i];
}
x^=x1;
cout<<x<<" "<<x1; 
}

6.求给定范围内所有数字&的结果

int rek(int l,int r){while(l<r)r-=r&(~r+1);return r;
}

7. 求出现次数少于m的数 

void  kk(int m){
memset(cnt,0,sizeof(cnt));
for(int i=0;i<12;i++){for(int j=0;j<32;j++)cnt[j]+=(a[i]>>j)&1;
}
int ans=0;
for(int i=0;i<32;i++){if(cnt[i]>0&&cnt[i]<m){ans|=1<<i;}
}
cout<<ans; }

相关文章:

  • 速成GO访问sql,个人笔记
  • AI之FastAPI+ollama调用嵌入模型OllamaBgeEmbeddings
  • 用 ESP32 模拟 Wiegand 刷卡器:开发门禁系统必备的小工具
  • C++入门小馆: 深入了解STLlist
  • 【金仓数据库征文】-不懂数据库也能看懂!一文解析金仓技术介绍以典型应用
  • 电子病历高质量语料库构建方法与架构项目(数据遗忘篇)
  • Redis 集群切片全解析:四种常见技术的原理、优劣与应用
  • 【MQ篇】RabbitMQ的消费者确认机制实战!
  • HTML word属性
  • 文档驱动:“提纲挈领”视角下的项目管理中枢构建
  • SpringBoot 学习
  • 2025 Java 开发避坑指南:如何避免踩依赖管理的坑?
  • 【Linux网络编程】应用层协议HTTP(实现一个简单的http服务)
  • 粒子群优化算法(Particle Swarm Optimization, PSO)的详细解读
  • 项目质量管理
  • Cancer Cell发表医学AI综述,聚焦于人工智能与转化癌症研究的交叉领域
  • exec和spawn
  • 软件工程效率优化:一个分层解耦与熵减驱动的系统框架
  • 系统思考:看清问题背后的结构
  • 无人售货机系统对接全流程拆解,4 步教你搭建私有化系统
  • 龙翔被撤销南京市人大常委会主任职务,此前已被查
  • 特朗普称加总理将很快访美,白宫:不影响将加拿大打造成“第51个州”计划
  • 中办、国办印发《安全生产考核巡查办法》
  • 张元济和百日维新
  • 路边“僵尸车”被人以1450元卖了,嫌疑人被刑拘
  • “五一”假期倒计时,节前错峰出游机票降价四成