位运算巧用

位运算是指按二进制位进行运算,运算符有一下几种

“&”按位与,“|”按位或,“~”取反,“^”按位异或

其真值表为:

a1 a2 & | ^

1 1 1 1 0

1 0 0 1 1

0 1 0 1 1

0 0 0 0 1

a1 ~

1 0

0 1

巧用异或

两个数异或的结果再与其中一个数异或,会得到另外一个数。

巧用按位与

按位与只有同时为1的时候才为1,所以可以用0000 1111来清零高字节,保留低字节。用1111 0000来清零低字节,保留高字节。

<<按位左移

>>按位右移

巧用左右移位

左右移也可以达到清零的作用。

时间: 2024-07-30 08:35:51

位运算巧用的相关文章

巧用位运算

1.用一个表达式,判断一个数X是否是2的N次方(2,4,8,16.....),不可用循环语句. 解析:X:2,4,8,16转化成二进制是10,100,1000,10000.如果减1则变成01,011,0111,01111.两者做按位与运算,结果如果为0,则X是2的N次方. 答案:!(X&(X-1)) 2.统计一个整数的二进制中1的个数 int CountNumberOfOne(int number) { int counter = 0; while (number) { number &=

编程思想:巧用位运算重构代码

开篇 在一门编程语言中,往往会提供大量的运算符.按功能来分的话,有算术运算符.赋值运算符.关系运算符.逻辑运算符.位运算符等.这些对于大家来说都不陌生.但是,本期的主角『位运算』符相对而言是比较少去使用的.因为位运算符主要针对两个二进制数进行位运算. 巧用位运算能极大的精简代码和提高程序效率.所以,在一些优秀的开源代码中,经常能出现位运算.所以,把位运算这种思想迁移到业务代码里,有时候往往能起到柳暗花明般的重构. 位运算 在 JAVA 语言中,定义了诸多的位运算符,如下所示: 运算符 描述 &

巧用c语言的位运算代替部分求余%计算

网上看到一个文章,里面讲述了四种高效c语言执行的方法, 1.使用空间代替时间 2.使用数学优化,而不是死计算,笨计算 3.使用位运算 4.使用嵌入汇编 前三点比较容易掌握,第四点基本上需要有比较深厚的汇编基础. 这里讲讲位运算, 1.无符号数据中, 左移1位,等价于除以2,右移1位,等价于乘以2,,切记不可溢出. 2.求余数, J = 456 % 32; ——456 - (456 >> 5 << 5);k = 456 % 64; ——456 - (456 >> 6 &l

【位运算生成枚举序列】

如果遇到这样的枚举情况,一个数组a[6],  每个值只能取0或者1,共有64种情况,我们需要一次枚举出来. 方法1:从0到63一次转换成二进制填充进去(麻烦). 方法2:位运算实现 代码: int main(void) { int cnt=0; for(int k=0; k<64; k++){ //枚举0---63 for(int j=0; j<6; j++) //6个数组位 if(k&(1<<j)) printf("1 "); //可以在此处将1填充到

Single Number II位运算解析

本题最机巧的O(n)解法最早由1337c0d3r于2013.11.26发布在leetcode.之后看到类似的,都系转载.引用或抄袭.(原文:https://oj.leetcode.com/discuss/857/constant-space-solution) 大多数转载都写得语焉不详,有的甚至据为己有.本帖旨在全面解析该算法. 如下: int singleNumber(int A[], int n) { int ones = 0, twos = 0, threes = 0; for (int

位运算

位运算的实际应用场景 http://blog.csdn.net/zmazon/article/details/8262185

POJ 1781 In Danger Joseph环 位运算解法

Joseph环,这次模固定是2.假设不是固定模2,那么一般时间效率是O(n).可是这次由于固定模2,那么能够利用2的特殊性,把时间效率提高到O(1). 规律能够看下图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2VuZGVuMjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" > 具体具体解析请看大师Knuth的Concrete m

位运算总结&amp;拾遗

JavaScript 位运算总结&拾遗 最近补充了一些位运算的知识,深感位运算的博大精深,此文作为这个系列的总结篇,在此回顾下所学的位运算知识和应用,同时也补充下前文中没有提到的一些位运算知识. 把一个数变为大于等于该数的最小的2的幂 一个数为2的幂,那么该数的二进制码只有最高位是1. 根据这个性质,我们来举个栗子,比如有数字10,转为二进制码后为: 1 0 1 0 我们只需把 0 bit的位置全部用1填充,然后再把该二进制码加1就ok了.而x | (x + 1)正好可以把最右边的0置为1,可是

Java I/O : Bit Operation 位运算

Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter    :BYSocket 泥瓦匠喜欢Java,文章总是扯扯Java. I/O 基础,就是二进制,也就是Bit. 一.Bit与二进制 什么是Bit(位)呢?位是CPU处理或者数据存储最小的单元.类似于很小很小的开关,一开一关,表示为1或者0.所以,这就是计算机处理任何数据的"细胞",要谨记.