编程语言
首页 > 编程语言> > 或非和java的移位操作符

或非和java的移位操作符

作者:互联网

MECE 原则,提升逻辑思维水平

MECE 原则(Mutually Exclusive Collectively Exhaustive)的中文意思是“相互独立,完全穷尽”,简而言之,能够做到不重叠、不遗漏,兼顾排他性和完整性

MECE 原则是麦肯锡提出的一种结构化思考方式,无论是报告撰写,提案演讲,业务分析,它是一种很好的思维方式。

在这里插入图片描述

在这里插入图片描述

LeetCode.剑指56:I

public class _56_I数组中数字出现的次数 {
    public static void main(String[] args) {
        int[] nums = {2,4,6,1,4,2};

        int mask=0;
        int a = 0;
        int b = 0;

        //寻找两个不重复的数的二进制相异的二进制位数:第一个1
        // 0 ^ x = x;     1 ^ 1 = 0;     //联想到半加器来理解
        for (int num : nums){   //这里求出想要的 mask = a^b的值, 用于比较出二进制相异的二进制位数:第一个1
            mask ^= num;
        }

        //找到用于比较出二进制相异的二进制位数:第一个1
        int index = 1;
        while ( (mask & index) == 0){ index = index << 1;  }

        //根据index,将两个不同的数分组,同时该位为1 / 0 的重复出现的数会被分到一组,因为值相同
        // 2,2,4,4,6
        //1
        for (int num : nums){

            if ( (index&num) == 0 ){  //利用0^x=0,index只有一个位置是1,区分该位置是否为0或1:只有1&1=1。
                a^=num;
            }else{
                b^=num;
            }
        }
        System.out.println(a + "和" + b );
    }
}

符号优先级

比如说:== 大于位运算符:

(a & 1) == 1 &&  (b & 1) == 1

优先级

运算符结合性
[ ] . ( ) (方法调用)从左向右
! ~ ++ – +(一元运算) -(一元运算)从右向左
* / %从左向右
+ -从左向右
> >>>从左向右
< >= instanceof从左向右
== !=从左向右
&从左向右
^从左向右
|从左向右
&&从左向右
||从左向右
?:从右向左
=从右向左

常规运算结果

异或,(・∀・(・∀・(・∀・*):

  0^0 = 0,

  1^0 = 1,

  0^1 = 1,

  1^1 = 0

有符号右移>>和无符号右移>>>

java的位运算符有三种: >> , >>> , <<。没有有符号左移

对于右移,简单的说,无符号移动无论正负数都是“高(空缺)位”补0。有符号移动则是根据高位即符号位,来补充空缺位。比如正数>> 则补0 , 负数>>则补1

对于正数

10 >> 1 或者 10 >>> 1

对于负数

-10 >> 1 或者 -10 >>> 1

标签:10,0000,index,int,1111,操作符,左向右,java,移位
来源: https://blog.csdn.net/qq_37334150/article/details/122673514