首页 > 其他分享 >位运算

位运算

时间:2023-09-13 09:25:04浏览次数:26  
标签:右移 0000 运算 int 取反 二进制

  • 位运算概述

  直接对整数在内存种的二进制进行操作。 

  &: 与  

  | : 或 

  ^:  异或  

  ~:取反

  <<: 各二进位全部左移若干位, 高位丢弃, 低位补0

  >>: 各二进位全部右移若干位, 对无符号数, 高位补0, 有符号数, 右移补1. 

  >>>: 无符号右移, 把二进制数右移若干位, 高位补0

  • &的常用用法
    • 判断奇偶性

      5 & 1 = 1        2 & 1 = 0   (奇数&1等于1, 偶数&1等于0)

    • 对 x 取模 ( x % y == x & (y - 1))

      5%4    --   5 & (4 - 1) = 1

      17%16  --  17&(16 -1)= 1

    • x & -x  (最低位1的权值)

      5 & -5 = 1      6 & -6 = 2

  • | (或)的常用用法
    • 可用于设置权限, 状态机, 位图
  • ^ (异或), ~(取反) 的常用用法
    • 偶数+1, 奇数-1

      6^1 = 7     5^1 = 4

    • x ^ -1 = ~x
    • 求相反数  (x^-1) + 1 = -x  或者 ~x +1 = x
    • 加密文件,交换两个变量的值  a^b^b=a
  • 判断正负, 负数>>31=-1, 正数>>31=0
  • 位运算算法题

   编写一个函数, 返回一个整数二进制表示中, 位1的个数. 例如 n= 8 (0000 0000 0000 0000 0000 0000 0000 1000),  输出: 1

public int countBits(int num) {
    int count = 0;
		
    for(int i = 0; i < 32; i++) {
        if((num & (1<<i)) != 0) {
            count++;
	}
    }
    return count;
}
	                

  a. int类型是4个字节, 是32位。 

  b. 可以用”n & (1<<i)", 1<<i (就是将1不断左移, 后面补0, 超过的舍掉)。 当1不断右移,就能计算出n有多少个1了。 

标签:右移,0000,运算,int,取反,二进制
From: https://www.cnblogs.com/nworld/p/17698588.html

相关文章

  • Python取余符号是什么?其运算规则有哪些?
    在Python中,取余运算是一种算术运算,又叫做模运算,是一种非常常用的运算方式,可以应用于判断奇偶数、计算周期、循环计数器等各种场景。那么Python中取余符号是什么?其运算规则有哪些?以下是详细内容介绍。Python中取余符号是什么?Python中的取余运算使用百分号%作为符号,其......
  • 为什么使用图进行关联运算比表Join更具吸引力?
    GeaFlow(品牌名TuGraph-Analytics)已正式开源,欢迎大家关注!!!欢迎给我们Star哦!GitHub......
  • 2. 变量与运算符
    1.关键字定义:被Java语言赋予了特殊含义,用作专门用途的字符串,如:public​特点:全部关键字都是小写字母官方网址2.标识符凡是自己命名的地方都叫标识符标识符的命名规则(必须遵守)由26个英文字母大小写,0-9,_或$组成数字不可以开头。不可以使用关键字和保留......
  • C++重载输入和输出运算符
    在C++中,标准库本身已经对左移运算符<<和右移运算符>>分别进行了重载,使其能够用于不同数据的输入输出,但是输入输出的对象只能是C++内置的数据类型(例如bool、int、double等)和标准库所包含的类类型(例如string、complex、ofstream、ifstream等)。如果我们自己定义了一种新的数据类......
  • decimal.js加减乘除运算 速记
      consta=9.99;constb=8.03;//加法letc=newDecimal(a).add(newDecimal(b))//减法letd=newDecimal(a).sub(newDecimal(b))//乘法lete=newDecimal(a).mul(newDecimal(b))//除法letf=newDecimal(a).div(newDecimal(b)) 转载:https......
  • 例2.9 建立一个带头结点的线性链表,用以存放输人的二进制数,链表中每个结点的data域存放
    1.题目例2.9建立一个带头结点的线性链表,用以存放输人的二进制数,链表中每个结点的data域存放一个二进制位。并在此链表上实现对二进制数加1的运算。2.算法分析3.代码/*二进制加1*/voidBinAdd(LinkListl){inttemp;Node*pa=l->next,*pb,*s;while(pa......
  • 检查Oracle中是否是“数字”函数,Oracle11时候,报is_number 无效的运算符,使用lenth( )
    检查Oracle中是否是“数字”函数原文链接:https://www.jb51.cc/oracle/207329.html我试图检查来自oracle(10g)查询中的列的值是否是一个数字,以便进行比较。就像是:selectcasewhen(is_number(myTable.id)and(myTable.id>0))then'Isanumbergreaterth......
  • C++的运算符重载介绍
    所谓重载,就是赋予新的含义。函数重载(FunctionOverloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作。运算符重载(OperatorOverloading)也是一个道理,同一个运算符可以有不同的功能。实际上,我们已经在不知不觉中使用了运算符重载。例如,+号可以对不同类型(int、float等)的......
  • JavaScript:逻辑运算符
    与(&&)、或(||)&&在JavaScript中,A&&B是一个逻辑与运算,其执行逻辑如下:如果表达式A的结果为假值(例如false、null、undefined、0、NaN或空字符串""),则整个表达式A&&B立即返回A的值,而不会继续执行B。如果表达式A的结果为真值(例如非空字符串、非零数值、对象或函......
  • Swift 中的Range类型和 Range运算符
    Swift中的Range类型和Range运算符赵邦华关注IP属地:广东0.3312020.10.1122:50:49字数574阅读5,198Swift中有五个最常用的Range类型:•ClosedRange:a...b•Rangea..<b•PartialRangeThrough:...b•PartialRangeFrom:a...•PartialRangeUpTo:..<b对应的,有......