位运算符主要针对两个二进制整数的位进行逻辑运算,主要有与(&)、非(~)、或(|)、异或(^),下面分别介绍其运算规则。
一、与(&)
与(&)的运算规则:
1、1 & 1 = 1;
2、0 & 1 = 1 & 0 = 0;
3、0 & 0 =0
以13&17为例,13的二进制为1101,17的二进制为10001,当13和17进行&运算时,由于17有五位,13只有四位,将13的二进制补成五位为01101,根据以上规则,对应的每一位进行&运算结果为00001,转换为十进制为1。
二、非(~)
非(~)的运算规则:
1、~ 1 = 0;
2、~ 0 = 1
以~13为例,13二进制为:
0000 0000 0000 0000 0000 0000 0000 0000 1101(正数的原码等于补码)
经过~运算后为:
1111 1111 1111 1111 1111 1111 1111 0010(其中第一位为符号位)
再求反码为:
1000 0000 0000 0000 0000 0000 0000 1101(其中求反码时符号位不变)
再对反码+1为:
1000 0000 0000 0000 0000 0000 0000 1110
其中1表示负号,0表示正号,转换为十进制为-14。
三、或(|)
或(|)的运算规则:
1、1 | 1 =1;
2、1 | 0 = 0 | 1 = 1;
3、0 | 0 = 0
以13|17为例,13的二进制为1101,17的二进制为10001,当13和17进行 | 运算时,由于17有五位,13只有四位,将13的二进制补成五位为01101,根据以上规则,对应的每一位进行&运算结果为11101,转换为十进制为29。
四、异或(^)
异或(^)的运算规则:
1、1 ^ 1 = 0 ,0 ^ 0 = 0;
2、0 ^ 1 = 1 ^ 0 = 1
以13^17为例,13的二进制为1101,17的二进制为10001,当13和17进行 ^ 运算时,由于17有五位,13只有四位,将13的二进制补成五位为01101,根据以上规则,对应的每一位进行&运算结果为11100,转换为十进制为28。
System.out.println(Integer.toBinaryString(13));//1101
System.out.println(Integer.toBinaryString(17));//10001
System.out.println(13&17);//1
System.out.println(~13);//-14
System.out.println(13|17);//29
System.out.println(13^17);//28