前言:
面试的时候遇到面试题是考察操作二进制的,本来学习的时候就没有好好看哪一点内容,这下整个人都不好了。
于是回来整理了一下java关于操作二进制的一些操作符。
知识点零:
- - -
知识点一:& (与运算符)
1. 特点:二元操作符,操作两个二进制数据;两个二进制数最低位对齐,只有当两个对位数都是1 时才为1 ,否则为0
2. 案例:
int a = 3 & 2 ;
System.out.println(a );
3. 分析:
3 的二进制补码表示为:
00000000 00000000 00000000 00000011
2 的二进制补码表示为:
00000000 00000000 00000000 00000010
运算:3 & 2
00000000 00000000 00000000 00000011
& 00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000010 二进制是2
知识点二:| (或运算符)
1 .特点:二元操作符,操作两个二进制数据;两个二进制数最低位对齐,当两个对位数只要有一个是1 则为1 ,否则为0
2 .案例:
int a = 3 | 2 ;
System.out.println(a);
3 .分析:
3 的二进制补码表示为:
00000000 00000000 00000000 00000011
2 的二进制补码表示为:
00000000 00000000 00000000 00000010
运算:3 | 2
00000000 00000000 00000000 00000011
| 00000000 00000000 00000000 00000010
-------------------------------------------
00000000 00000000 00000000 00000011 该补码对应十进制为3
知识点三:^ (异或运算符)
1. 特点:二元操作符,操作两个二进制数据;两个二进制数最低位对齐,只有当两个对位数字不同时为1 ,相同为0
2. 案例:
int a = 3 ^ 2 ;
System.out.println(a );
3. 分析:
3 的二进制补码表示为:
00000000 00000000 00000000 00000011
2 的二进制补码表示为:
00000000 00000000 00000000 00000010
运算:3 ^ 2
00000000 00000000 00000000 00000011
^ 00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000001 该补码对应十进制为1
知识点四:~ (非运算符)
1. 特点:一元操作符,
2. 规则:生成与输入位相反的值
3. 案例:
int a = ~ 2 ;
System.out.println(a );
4. 分析:
2 的二进制补码表示为:
00000000 00000000 00000000 00000010
运算:
~ 00000000 00000000 00000000 00000010
11111111 11111111 11111111 11111101
知识点五:<<(左移运算符)
0. 形式: m << n
1. 特点:二元操作符,m数字二进制向左移动n位的结果;结果相当于: m*(2 的n次方)
2. 案例:
int a = 3 << 2 ;
System.out.println(a );
3. 分析:
3 的二进制补码表示为:
00000000 00000000 00000000 00000011
运算:3 << 2
00000000 00000000 00000000 00000011
<< 2
00000000 00000000 00000000 00001100 该补码对应十进制为12
知识点六:>> (右移运算符)
0. 形式: m >> n
1. 特点:二元操作符,m数字二进制向右移动n位的结果;结果相当于: m / (2 的n次方) 的结果向上取整
2. 案例:
int a = 3 >> 2 ;
System.out.println(a );
3. 分析:
3 的二进制补码表示为:
00000000 00000000 00000000 00000011
运算:3 >> 2
00000000 00000000 00000000 00000011
>> 2
00000000 00000000 00000000 00000000 该补码对应十进制为0
4. 注意: 最后的11 向右移动两位,正好补上左边补上0 ; 所以结果为0
知识点七:>>> (无符号右移运算符)
1. 二元操作符
2. 特点:它使用0 扩展,无论正负都在最高位补0
3. 案例:
int a = 3 >>> 2 ;
System.out.println(a );
4. 分析:
3 的二进制补码表示为:
00000000 00000000 00000000 00000011
运算:
00000000 00000000 00000000 00000011
>>>2
00000000 00000000 00000000 00000000
八、附上java编程思想里面关于位操作符的描述