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进制:
1 | 1 | 0 | 0 | 1 | 1 | 0 | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
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(位运算)的主要内容,如果未能解决你的问题,请参考以下文章