常用技巧 —— 位运算 —— 位运算的应用
1.lowbit:计算一个数字 x 二进制下最低位 1 对应的值
方法:
int lowbit(int x){return x&(-x);
}
lowbit 利用了补码的特性:正数的补码是其自身,负数的补码是正数按位取反后加一
例如:10 的补码是 1010,-10 的补码是 0110,按位相与后,即可得到 x 二进制下最低位 1 对应的值,即 lowbit(10)=2
2.判断一个数字 x 二进制下的第 i 位是不是等于 1
方法:
if( ( 1<<(i-1) ) & x )
将 1 左移 i-1 位,相当于制造了一个只有第 i 位上是 1,其他位上都是 0 的二进制数,然后与 x 与运算,如果结果大于 0,说明 x 第 i 位上是 1,反之为 0
3.将一个数字 x 二进制下第 i 位改为 1
方法:
x = x | (1<<(i-1))
将 1 左移 i-1 位,相当于制造了一个只有第 i 位上是 1,其他位上都是 0 的二进制数,然后与 x 或运算即可
4.把一个数字 x 二进制下最靠右的第一个 1 去掉。
方法:
x = x & (x-1)
5.计算一个数字 x 二进制下含有 1 或 0 的个数
int num=0;
while(x){x = x & (x-1);num++;
}
6.判断一个数 x 是否为 2 的 n 次方
bool judge(int x) {if( (x & (x-1)) == 0)return true;elsereutrn false;
}
常用技巧 —— 位运算 —— 位运算的应用相关推荐
- 常用技巧 —— 位运算 —— 位运算基础
[与运算] 与运算常用于二进制的取位操作,其用符号 & 表示,相同位的两个数字都为1,则为1,若有一个不为1,则为0. 例如:00101 & 11100 = 00100 其会将两个十进 ...
- 【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子.不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也 ...
- 【FPGA】定点数 数据位宽 运算 位宽截取
在FPGA中,经常使用定点数表示小数,在进行各种运算时,定点数的位宽会发生变化,并且需要在适当地时候对数据的位宽进行截取. 运算要求和引起的位宽变化 假设存在两个数A.B,假定A位宽为m,小数位宽为a ...
- BMP格式知识之二:16位,24位,32位的BMP图片算法是如何运算的
BMP格式知识之二:16位,24位,32位的BMP图片算法是如何运算的 原文:http://blog.csdn.net/qq445803843/article/details/46476433 这段代 ...
- 使用位运算(与运算)代替%操作
使用位运算(&与运算)代替%操作 %运算为取余运算 由于我们知道位运算比较高效,在某些情况下,当b为2的n次方时,有如下替换公式: a % b = a & (b-1)(b=2^n) 即 ...
- Home_W的位运算(位运算+预处理)
Home_W的位运算1 题目链接: 传送门解题思路:这题有两种解题思路,一种就是\(n^2\times m\)的时间复杂度,还有一种就是经过预处理的时间复杂度为\(n^2\)的方法,先说第一种,大家直 ...
- 关于库位“参与MRP运算”与“不参与运算”相互变动的注意事项
一.现状 因实际业务需求,库存从"不参与MRP运算"调整为"不参与运算",反之亦然. 二.原理 1.库位是否参与MRP运算 设置库位是否参与MRP运算, ...
- 设变量n为float类型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五人运算的表达式是: A) n=(n*100+0.5)/100.0 B)m=n*100+0.5
设变量n为float类型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五人运算的表达式是: A) n=(n100+0.5)/100.0 B)m=n100+0.5 ,n= m ...
- java符号位_java 位运算符号
<道生一,一生二,二生三,三生万物>出自老子的<道德经>第四十二章.主要讲述了一.二.三这几个数字,并不把一.二.三看作具体的事物和具体数量.它们只是表示"道&quo ...
- MATLAB常用命令、函数与运算
MATLAB常用命令.函数与运算(自学笔记1) 笔者正在学习matlab的m函数,本文为学习笔记的其中之一. 本文主要介绍MATLAB中常用的命令.函数和运算. 文章目录 MATLAB常用命令.函数与 ...
最新文章
- 用AI变身16岁女孩,抓住40岁违法警察!20岁男大学生钓鱼执法秀翻美国!
- mysql 复合索引 in,MySQL复合索引比主键索引还快,为什么?
- php7 thinkphp5,thinkphp5+phpstudy+php7.0连接SQL Server 2008 | 睿客网
- [学习笔记]python
- Android中menu详解(转)
- Coding and Paper Letter(三十九)
- Tip:使用Extender的ResolveControlID事件
- python复制列表元素_Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解...
- 菜鸟学习笔记:Java提升篇9(网络1——网络基础、Java网络编程)
- java实验总结_java第一次实验总结第三周总结
- 商业认知,你每天出门看天气吗?
- 从Hadoop看普通算法在一个系统中的应用
- 安装go编译器后没有gopath文件夹_Go 语言环境安装(集成 VS code)
- 一站式学习 Linux C语言编程
- E66 PC套件因多个USB的连接导致连接不上问题解决办法
- 985翻译硕士都在找的这款软件
- XlsxWriter的使用
- 海量数据处理技巧-转载
- ap9h4qmo.exe
- MySQL高级篇——事务
热门文章
- 中台到底是什么?传统企业怎样建设中台?
- 近 5 亿人的隐私,毁于一位程序员之手?
- STM32之定时器原理
- 转移到ios下载安卓_安卓和IOS角色互转 和平精英跨系统角色转移服务将上线
- python如何安装pdfminer_|请教在python3中安装pdfminer.six的方法
- ddos攻击工具_linux下DDoS攻击模拟实战
- 免费送新款华为笔记本 ! !不爱可折现!
- 用了这么久的数据库连接池,你知道原理吗?
- Kmeans CUDA
- String类以及String与基本数据类型/char[]/byte[]之间的转换