Java基础10----运算符3(位运算)

Posted iostreamzl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础10----运算符3(位运算)相关的知识,希望对你有一定的参考价值。

引言

这里将要将的是位运算,位运算是能直接进行二进制数据处理的运算方式。主要有 与(&)、或(|)、异或(^)、求反(~)、和位移(<<, >>)操作。要想理解位运算,需要理解十进制与二进制之间的转换操作

二进制十进制之间的转换

十进制转二进制:除2取余,商0为止,反向写余数就是十进制的二进制表示。
示例:11转换为二进制
11 / 2 = 5 … 1
5 / 2 = 2 … 1
2 / 2 = 1 … 0
1 / 2 = 0 … 1
将余数方向,则11的二进制表示为:1011,而在Java中int是32位的,所以11在Java中表示为:00000000 00000000 00000000 00001011.
二进制转10进制:2的等比求和
示例:二进制1100110转换为10进制:

1100110
1* 26+1*25+0*24+0*2 3+1*22+1*21+0*20

所以1100110转化为10进制就是102

位运算

与(&)运算

对应位置都是1结果才为1,否则为0
示例:3和6的位与运算

public class Demo {
    public static void main(String[] args) {
        // 与运算
        int a = 3, b = 6;
        System.out.println(a & b);
    }
}

3的二进制0 1 1
6的二进制1 1 0
按位与运算0 1 0

所以最终的结果为2.

或(|)运算

只要同一位置有一个为1,则结果为1,只有全部为0才为0

public class Demo {
    public static void main(String[] args) {
        // 或运算
        int a = 3, b = 6;
        System.out.println(a | b);
    }
}

3的二进制0 1 1
6的二进制1 1 0
按位或运算1 1 1

所以最终的结果为7.

异或(^)运算

只有对应位置不相同才为1,否则为0。也就是说只有1-0为1,其他的都为0

public class Demo {
    public static void main(String[] args) {
        // 异或运算
        int a = 3, b = 6;
        System.out.println(a ^ b);
    }
}

3的二进制0 1 1
6的二进制1 1 0
按位异或运算1 0 1

所以最终的结果为5

位移操作

左移(<<)几位相当于乘以2的几次方,右移(>>)几位相当于除以2的几次方
左移操作:

public class Demo {
    public static void main(String[] args) {
        // 左移运算
        int a = 2;
        System.out.println(a << 3); // 2 * 2^3 = 16
    }
}

2的二进制0 0 0 0 1 0
左移三位0 1 0 0 0 0

所以最终的结果为16
右移操作

public class Demo {
    public static void main(String[] args) {
        // 右移运算
        int a = 2, b = 40;
        System.out.println(a >> 3); // 0
        System.out.println(b >> 3); // 5
    }
}


右移操作会将移出的数字丢弃

40的二进制0 1 0 1 0 0 0
右移三位0 0 0 0 1 0 1

所以最终的结果为5

求反运算

很直白的来说就是将0,1互换

public class Demo {
    public static void main(String[] args) {
        // 求反运算
        int a = 3;
        System.out.println(~a); // -4
    }
}


右移操作会将移出的数字丢弃

3的二进制[0 ]0 1 1
求反[1 ]1 0 0

所以最终的结果为-4
在计算机中最高位是符号位,0表示正数,1表示负数,求反会连同符号位一起求反。所以最终结果为-4

总结

位运算需要了解二进制才能有较好的理解。位运算能加块程序的执行速度,但是现在计算机的性能都比较好,位运算没有那么的使用广泛了。

以上是关于Java基础10----运算符3(位运算)的主要内容,如果未能解决你的问题,请参考以下文章

Java位运算基础知识

java基础运算符

Java基础位运算<<,;;,;;;,&,|,^,~

Java基础之二进制的位运算介绍

Java 基础知识点 笔记总结

Java中的位运算