位运算

《硬核程序基础》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) )); } }

 

posted @ 2021-03-09 21:04  辰南以北  阅读(91)  评论(0编辑  收藏  举报