美文网首页
位运算数学意义及应用场景

位运算数学意义及应用场景

作者: 勤劳的熊熊 | 来源:发表于2019-04-13 14:52 被阅读0次

简介

梳理一下位运算定义、数学意义以及它的应用场景,在日常编码中能给我们带来什么提升。

运算定义

了解原码反码和补码

  • 定义:正数的二进制即为原码,负数的二级制为正数的反码再补码,反码将二进制数按位取反(1变0,0变1),补码对反码加1
  • 案例 -5
原码:00000000 00000000 00000000 00000101
反码:11111111 11111111 11111111 11111010
补码:11111111 11111111 11111111 11111011

<<(左移)

  • 运算规则:
    按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
  • 案例: 3 << 2,则是将数字3左移2位
    计算过程:
    3 << 2 首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12。
  • 数学意义
    如果是10进制向左移动一位,是不是就成了10倍,移两位乘100倍,所以在数字没有溢出的前提下,对于正数和负数,二进制左移左移n位就相当于乘以2的n次方。

>> (带符号右移)

  • 运算规则:
    按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。
  • 案例11 >> 2,则是将数字11右移2位
    计算过程:
    11 的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010。转换为十进制是2。
  • 数学意义
    右移一位相当于除2,右移n位相当于除以2的n次方(取整)。

>>> (不带符号右移)

  • 运算规则:
    按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),符号位的空位补0,即正数。

&(按位与)

  • 运算规则:将2个操作数都转为二进制,第一个操作数的的第n位与第二个操作数的第n位如果都是1,那么结果的第n为也为1,否则为0
  • 案例 5 & 3
计算过程:
5 转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
3 转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011
计  算  结  果:0000 0000 0000 0000 0000 0000 0000 0001

|(按位或)

  • 运算规则:第一个操作数的的第n位于第二个操作数的第n位 只要有一个是1,那么结果的第n为也为1,否则为0
  • 案例 5 | 3
计算过程:
5 转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
3 转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011
计  算  结  果:0000 0000 0000 0000 0000 0000 0000 0111

^(位异或)

  • 运算规则:第一个操作数的的第n位于第二个操作数的第n位 相反,那么结果的第n为也为1,否则为0
  • 案例 5 & 3
计算过程:
5 转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
3 转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011
计  算  结  果:0000 0000 0000 0000 0000 0000 0000 0110

~(位非即反码)

  • 运算规则:操作数的第n位为1,那么结果的第n位为0,反之为1。
  • ~5
计算过程:
5 转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
计  算  结  果:1111 1111 1111 1111 1111 1111 1111 1010

实际应用

判断奇偶
a&1 == 0 ; //偶数
a&1 == 1;  //奇数
整数平均数
// (x+y)/2可能产生溢出
int average(int x, int y) {   
     return (x&y)+((x^y)>>1);
}
不用临时变量交换两个数
x ^= y;
y ^= x;
x ^= y;
状态标识

商品有多种状态,比如是否支持货到付款、是否虚拟商品、是否预售商品、是否图书商品、是否可开增票等,我们可以用五位的二进制来标识对应的状态,如10010,表示该商品是支持货到付款的图书商品

趣味案例

有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?

  • 把所有的瓶子按照二进制标号,10个老鼠对应二进制10个位,将所有瓶子位的值为1的液体喂给对应位的老鼠,最后将死亡的老鼠组合起二进制数就可以判断哪一瓶是毒药

相关文章

  • 位运算数学意义及应用场景

    简介 梳理一下位运算定义、数学意义以及它的应用场景,在日常编码中能给我们带来什么提升。 运算定义 了解原码反码和补...

  • java 算法题 - 面试中常见的位操作算法题

    前言 上一篇博客 聊一聊 Android 中巧妙的位操作 中,我们讲解了 java 中常用的位运算及常用应用场景,...

  • 位运算及其应用场景

    概念理解 按位与 & :全1为1,有0为0 假设 1:true,0:false,联想Java中的&&运算符,只有两...

  • JS位运算应用场景

    准备知识 2进制和16进制 0x开头是16进制 0b开头是2进制 进制转换 数字转换成字符串 numObj.toS...

  • 17.位运算基础及实战要点

    17.位运算基础及实战要点 位运算符 算数移位与逻辑移位 位运算的应用 为什么需要位运算 机器里的数字表示方式和存...

  • day03总结

    运算符: 数学运算符、比较运算符、逻辑运算符、赋值运算、(位运算) 1. 数学运算符: +,-,,/,//,%,*...

  • 位运算应用

    取模 由于偶数的最低位为 0,奇数为 1,所以取模运算可以用位操作来代替。 取整 位掩码 通过定义这些选项,可以用...

  • Day03学习总结-运算符、数字类型、字符串

    运算符 Python支持:数学运算符、比较运算符、逻辑运算符、赋值运算符、(位运算符) 1.数学运算符 数学运算符...

  • 2018-07-17 python运算符

    运算符有:数学运算符、比较运算符、逻辑运算符、赋值运算符、位运算符(针对二进制的每一位) 1.数学运算符(+、-、...

  • 位运算及其应用

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

网友评论

      本文标题:位运算数学意义及应用场景

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