当前位置: 首页 > 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 步教你搭建私有化系统
  • 体育公益之约跨越山海,雪域高原果洛孕育足球梦
  • 李彦宏:DeepSeek不是万能,多模态将是未来基础模型的标配
  • 中美正在就关税问题谈判甚至会达成协议?外交部:都是假消息
  • 张广智当选陕西省慈善联合会会长
  • 女子遭前男友泼汽油烧伤致残案二审庭审:检方抗诉称一审量刑不当
  • 中国与柬埔寨签署产供链经济合作谅解备忘录