位运算
《硬核程序基础》JAVA 位运算代码笔记
public class TestOperator { public static void main(String[] args){ System.out.println("=====按位运算符====="); int num =86; /**位运算1 * 判断奇数偶数 * 后面的判断要整体加括号,因为前面的"+"优先级较高,编译时系统会先运算 "+" */ System.out.println(num+"是:"+ ( (num&1)==0?"偶数":"奇数" ) ); /**位运算2 * 判断第几位二进制数是0还是1 * 86: 1010110 * 1<<4: 1左移4位 0010000 */ System.out.println(num + "第五位二进制数是:" +(((num&(1<<4))==0)?"0":"1")); System.out.println(num + "第五位二进制数是:" +((((num>>4)&1)==0)?"0":"1")); /**位运算2 * 交换两个整数的值 */ int num1 = 10; int num2 = 20; /** * a、b两个值不相同,异或结果为1
* 异或可以理解为不进位加法:0+0=0,1+1=0,1+0=1 * 和自己异或是0,和0异或是自己 * _num1:第一个数的值 _num2:第二个数的值 * num1 = _num1^_num2 * num2 = _num1^_num2^_num2 = _num1^0 = _num1 * num1 = _num1^_num2^_num1 = _num2^0 = _num2 */ num1 = num1^num2; num2 = num1^num2; num1 = num1^num2; System.out.println("num1:"+num1+",num2:"+num2); /**位运算3 * 不用判断语句,求整数的绝对值 * 后面的运算语句要整体加括号 * a正数:a>>31=0; 0000...0000(32位0) a^0=a * a负数:a>>31=-1; 1111...1111(32位1) a^-1=a 1越多越大意味着离0越近 * a正数:a>>>31=0; 0000...0000 * a负数:a>>>31=1; 0000...0001 * a负数取反加1就是它的绝对值/原码 (a^-1)+1 */ num2 = -20; System.out.println(num2+"的绝对值:"+( (num2^(num2>>31))+(num2>>>31) )); } }