zoukankan      html  css  js  c++  java
  • Java学习之位运算符

    位运算符:&,|,^,~,<<,>>
    & (按位与):只有对应的两个二进制位均为1时,结果才为1。例如,9&5,即00001001&00000101=00000001
    |(按位或):只要对应的两个二进制位有一个为1,结果就为1,例如9|5,即00001001|00000101=00001101
    ^(按位异或):两对应的二进制相异时,结果为1
    ~(求反运算):~9=~(1001)=0110=6
    <<(左移运算):把<<左边的运算数个二进制位全部左移若干位,由<<右边的数指定移动的位数,高位丢弃,低位补零。例如a<<4,a=00000011,则a=00001100
    位运算符的妙用:
    1.判断奇偶性:
    if(a&1)
    {
    System.out.printIn("a为奇数");
    }
    if(a&1==0)
    {
    System.out.printIn("a为偶数");
    }
    解释:奇数的二进制最低位为1,偶数为0,又因为与0相&,结果都为0,所以如果是奇数,结果为00000001,否则为00000000;
    2.交换变量值
    a=a^b;
    b=a^b;
    a=a^b;
    解释:先令a=a^b,则b=a^b=(a^b)^b=(b^b)^a=0^a,又因为a^0时,a保持不变(0 0时为0,0 1时为1)
    3.求整数平均值
    int x;
    int y;
    int avg=(x&y) +((x^y)>>1);
    解释:
    因为x>>1相当于x/=2,类似的例子还有x<<1相当于x*=2,x>>2相当于x/=4,x<<2相当于x*=4,那么求x,y的整数平均值,使(x+y)>>1不就得了,为什么还要进行(x&y)+((x^y)>>1)这样的操作呢?
  • 相关阅读:
    Application,Session,Cookie,ViewState,Cache对象用法、作用域的区别
    leetcode系列---3Sum C#code
    leetcode系列---atoiFunction C#code
    leetcode系列---Two Sum C#code
    .NET webAPI中集成swagger
    js去空格
    clip 属性剪裁绝对定位元素
    css实现隐藏显示
    无阻塞加载脚本的方案
    打乱数字数组的顺序
  • 原文地址:https://www.cnblogs.com/weiyuan/p/5717431.html
Copyright © 2011-2022 走看看