位运算

作者: LxxxR | 来源:发表于2018-05-16 16:37 被阅读0次

(注意:负数按补码参与位运算)

1,& 与

取n对应二进制的最后一位: n&1
取n对应二进制的某一位:n&(1<<k)
将n对应二进制的最后一个1变为0:n&(n-1)


求n/2的余数:即取n二进制的最后一位
推广:求 n/2k 的余数:即取n二进制的最后k位

2,| 或

将n对应二进制的最后一位置为1: n|1

3,~ 非

改变符号:x -> ~x+1 = -x
~y=-y-1
x-y=x+~y+1

4,^ 异或

不进位的加法;

性质:a^0=a; a^a=0;

用来求只出现一次的那个数:所有数相异或;

交换两个数值: x=x^y; y=x^y; x=x^y;

5,>> 右移

左边补符号位(>>> 可实现左边补零)
n>>1 == n/2

6,<< 左移

右边补0
n<<1 == n*2

7,不同长度的数据进行位运算

按右端对齐,然后位运算。
右端对齐后,左边不足的位:
(1)如果整型数据为正数或无符号数,左边补0。
(2)如果整型数据为负数,左边补1。

例题

例1,求x/2n
分析:位运算的右移是向下取整,正数的除法除法是向下取整,负数的除法是向上取整

int divpwr2(int x, int n) { 
    //当为负数&余数不为0时,对x>>n要加1 
    return (x >> n) + ((x >> 31) & !!(x ^ ((x >> n) << n)));  
}  

例2,求x的二进制中1的个数
分析:做一次x=x&(x-1)运算,x最右边的1就变为0

int numof1(int x){
    int count=0;
    while(x){
        x=x&(x-1);
        count++;
    }
    return count;
}

扩展
1,判断x是否是2的k次方?
分析:即x的二进制中是否只有一个1
2,输入m和n,求改变m的二进制的多少位才能变为n
分析:x=m^n,则x的二进制中为1的位就是m和n不相同的位,所以求x的二进制中1的个数即可

例3,对x的二进制的低八位和高八位交换
int ans= x<<8 | x>>8

例4,用位运算实现加法
分析:x^y是x,y的不进位加法,x&y是x,y都为1的位置,a&b<<1就是进位,所以:a+b = (a^b)+(a&b<<1),当b为0时,a就是结果

    int aplusb(int a, int b) {
        int a2,b2;
        while(b){
            a2=a^b;
            b2=(a&b)<<1;
            a=a2;
            b=b2;
        }
        return a;
    }

相关文章

  • 3、小众运算符の大课堂(一)

    较为简单の位运算符: & 位与运算| 位或运算^ 位异或运算~ 位取反运算 举例: 要做位运算,首先要把数据转...

  • 位运算及其应用

    内容概要: 位运算基本操作 基于位运算的状态压缩 位运算经典应用 位运算解N皇后问题 位运算 符号描述规则&与1&...

  • 位运算及用位运算实现权限控制

    请自行补习位运算相关知识 位运算 位运算示例 权限控制

  • 开发基础随笔之位运算符(Bitwise Operators)

    位运算符,属于算术运算符 按位逻辑运算符: 位移运算符: 位运算符的运算数只能是整数 位移运算符:按位左移 a<<...

  • 强大的位运算符

    位取反运算符 位取反运算符(~)是对所有位的数字进行取反操作位取反运算符.png 位与运算符 位与运算符(&)可以...

  • 位运算

    位运算 1. &:按位与 规律:一假则假任何位上的数和1相&得到的结果还是那个数 2. |:按位或 规律:一真则真...

  • 位运算

    https://leetcode.com/problems/gray-code/description/这个位运算...

  • 位运算

    位运算符比一般的算术运算符速度要快,而且可以实现一些算术运算符不能实现的功能。如果要开发高效率程序,位运算符是必不...

  • 位运算

    1.不用加减乘除做加法 解法:分为三步①各位相加不进位,即先按位异或;②做进位,按位与并左移位;③结果相加,直至没...

  • 位运算

    位运算不仅可以简化某些复杂的操作,而且具有更快的计算速度。典型的应用就是除法,交换两个数值,以及在一个数组中寻找只...

网友评论

      本文标题:位运算

      本文链接:https://www.haomeiwen.com/subject/hwwudftx.html