首页 > 其他分享 >位运算小技巧

位运算小技巧

时间:2024-03-12 23:57:07浏览次数:20  
标签:11 判断 相与 运算 是否是 技巧 异或 幂模

位运算技巧

1.求一个数是否是2的幂

一个数是2的幂,其二进制必定为1000(若干个0,1个1)的形式,将其减一即为0111,相与必为0

判断n是否是2的幂,只需要判断n > 0 以及n & n - 1是否为0

2.求一个数是否是4的幂

4的幂一定是2的幂,2的幂不一定是4的幂

2的偶数次幂模3为1,奇数次幂模3为2,即4的幂模3为1

判断n是否是4的幂,只需要判断n是否是2的幂且模3为1 n > 0 && n & (n - 1) == 0 && n % 3 == 1

3.求一个数中位1的个数


如果某个数表示成...1000的形式,这里展示的是其最低位的1,只需要与n - 1相与,即可消除掉最低位的1

在n > 0的条件下不断将n & n - 1,记录消除1的次数即可

4.不用临时变量交换两数

任何数和0异或结果为其本身,任何数和自身异或结果必定为0。
异或满足交换律和结合律

5.寻找只出现1次的数字

在数组中除了一个数,其他的数都出现两次,找这个数

将所有的数异或,出现两次的数两两异或为0,最终剩只出现一次的数与0异或,结果为其本身

6.汉明距离

汉明距离:求两个数中对应二进制位不相同的数目

两个数异或,其二进制位不同的位置必定为1,因此问题转换为求两数异或的结果中位1的个数,与第3题相同

7.判断一个数二进制是不是由交替的01组成(不能出现00或11)

任何数与全1相与值为本身,对于每两位与11(十进制为3)相与进行检查,出现00或11则为false

while(n)
{
if((n & 3) == 0 || (n & 3) == 3)
  return false;
n >>= 1;
}

标签:11,判断,相与,运算,是否是,技巧,异或,幂模
From: https://www.cnblogs.com/suz10720/p/18069662

相关文章

  • 实验1 C语言开发环境使用和数据类型、运算符、表达式
    1#include<stdio.h>2intmain()3{4printf("o\n");5printf("<H>\n");6printf("II\n");78return0;9}#include<stdio.h>intmain(){printf("oo\n"......
  • 实验1 C语言开发环境使用和数据类型、运算符、表达式
    task1点击查看代码#include<stdio.h>intmain(){printf("o\n"); printf("<H>\n"); printf("II\n"); printf("o\n"); printf("<H>\n"); printf("II\n"); system("......
  • 【经验】PADS 一点心得和技巧
    偶是PADS的新手,原来一直用protel。花了四天时间第一次用PADS2005画了一块大板子,开始确实有很多感觉不方便不熟悉的地方。现在算是入门了,也总结了一些经验和技巧。希望对PADS的新手能有所帮助。1.布局时飞线(鼠线,connection)的处理。Layout的缺省设置并不是让飞线最短化。一开始......
  • 使用 PMML 实现模型融合及优化技巧
    在机器学习的生产环境中,我们经常需要将多个模型的预测结果进行融合,以便提高预测的准确性。这个过程通常涉及到多个模型子分的简单逻辑回归融合。虽然离线训练时我们可以直接使用sklearn的逻辑回归进行训练和调参,但在生产环境中,模型的上线往往需要使用PMML(PredictiveModelMarkup......
  • JavaScript 高阶技巧
    0x01深浅拷贝开发中经常需要拷贝(复制)一个对象,如果直接赋值,则对拷贝对象的修改会影响到源对象consto1={a:1,b:2}consto2=o1console.log(o2)//{a:1,b:2}o2.a=3console.log(o1)//{a:3,b:2}console.log(o2)//{a:3,b:2}原因在于,直......
  • 轻松驾驭Python格式化:5个F-String实用技巧分享
    F-String(格式化字符串字面值)是在Python3.6中引入的,它是一种非常强大且灵活的字符串格式化方法。它允许你在字符串中嵌入表达式,这些表达式在运行时会被求值并转换为字符串,这种特性使得F-String在编写Python代码时能够更简洁、更直观地处理字符串。本文总结了5个实用的F-String技......
  • Java HashMap 和 HashSet 的高效使用技巧
    JavaHashMapHashMap是一种哈希表,它存储键值对。键用于查找值,就像数组中的索引一样。HashMap的优势在于它可以使用任何类型作为键,并且查找速度很快。创建HashMap//导入HashMap类importjava.util.HashMap;publicclassMain{publicstaticvoidmain(String[]a......
  • 4-2张量的数学运算
    张量的数学运算主要有:标量运算,向量运算,矩阵运算,以及使用非常强大而灵活的爱因斯坦求和函数torch.einsum进行任意维的张量运算。此外我们还会介绍张量运算的广播机制:本篇文章内容如下:标量运算向量运算矩阵运算任意维张量运算广播机制importtorchprint("torch.__vers......
  • 位运算 --20240310
    位运算在linux内核或裸驱中使用十分常见,下面是两种使用方式在此记录: 对寄存器进行操作:举个例子,1、清除bit8-bit10,并将bit8-bit10设置为0x2reg=(reg&(~(0x7<<8))|(0x2<<8));2、将bit4置一和置零reg=(reg&(~(0x1<<4)))|(0x0<<4);//bit4置零reg=......
  • 第04章_运算符
    第04章_运算符讲师:尚硅谷-宋红康(江湖人称:康师傅)官网:http://www.atguigu.com1.算术运算符算术运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式,对数值或表达式进行加(+)、减(-)、乘(*)、除(/)和取模(%)运算。1.加法与减法运算符mysql>SELECT100,100+0,100-0,1......