Java学习笔记2.3.5 运算符与表达式 - 位运算符
Posted howard2005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习笔记2.3.5 运算符与表达式 - 位运算符相关的知识,希望对你有一定的参考价值。
文章目录
零、本讲学习目标
- 理解位运算的含义
- 掌握位运算的使用
一、位运算符概念
- 位运算符是针对二进制数的每一位进行运算的符号,它专门针对数字0和1进行操作。
二、位运算符使用
(一)分类说明表
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
& | 按位与 | a & b | a和b每一位进行“与”操作后的结果 |
| | 按位或 | a | b | a和b每一位进行“或”操作后的结果 |
~ | 取反 | ~ a | a的每一位进行“非”操作后的结果 |
^ | 按位异或 | a ^ b | a和b每一位进行“异或”操作后的结果 |
<< | 左移 | a << b | 将a左移b位,右边空位用0填充 |
>> | 右移 | a >> b | 将a右移b位,丢弃被移出位,左边最高位用0或1填充 |
>>> | 无符号右移 | a >>> b | 将a右移b位,丢弃被移出位,左边最高位用0填充 |
- 按位与运算真值表
& | 0 | 1 |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
- 按位或运算真值表
| | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 1 |
- 按位异或运算真值表
^ | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 0 |
- 取反运算真值表
~ | 0 | 1 |
---|---|---|
1 | 0 |
(二)注意事项
位运算符本质都是针对二进制数0和1进行运算的,在使用位运算符时,都会先将操作数转换成二进制数的形式进行位运算,然后将得到的结果再转换成想要的进制数。其中,1表示true,0表示false。
(三)案例演示
1、按位与
2、按位或
3、逐位取反
4、按位异或
5、左移
6、右移
7、无符号右移
8、演示各种位运算
package net.hw.lesson05;
/**
* 功能:演示位运算
* 作者:华卫
* 日期:2020年3月22日
*/
public class Example509
public static void main(String[] args)
int a = 0b00000110;
int b = 0b00001011;
// 按位与
System.out.println(Integer.toBinaryString(a) + " & " + Integer.toBinaryString(b) + " = " + Integer.toBinaryString(a & b));
// 按位或
System.out.println(Integer.toBinaryString(a) + " ! " + Integer.toBinaryString(b) + " = " + Integer.toBinaryString(a | b));
// 逐位取反
System.out.println("~" + Integer.toBinaryString(a) + " = " + Integer.toBinaryString(~a));
// 按位异或
System.out.println(Integer.toBinaryString(a) + " ^ " + Integer.toBinaryString(b) + " = " + Integer.toBinaryString(a ^ b));
// 左移
System.out.println(Integer.toBinaryString(b) + " << 1 = " + Integer.toBinaryString(b << 1));
// 右移
System.out.println(Integer.toBinaryString(b) + " >> 1 = " + Integer.toBinaryString(b >> 1));
// 无符号右移
System.out.println(Integer.toBinaryString(b) + " >>> 1 = " + Integer.toBinaryString(b >>> 1));
- 运行程序,查看结果
9、演示右移与无符号右移的区别
如何才能体现出右移与无符号右移的区别呢?
package net.hw.lesson05;
/**
* 功能:演示右移与无符号右移的区别
* 作者:华卫
* 日期:2020年3月22日
*/
public class Example510
public static void main(String[] args)
int a = 0b00000111111111111111111111111001; // 正数
int b = 0b10000111111111111111111111111001; // 负数
// 右移
System.out.println(Integer.toBinaryString(a) + " >> 1 = " + Integer.toBinaryString(a >> 1));
// 无符号右移
System.out.println(Integer.toBinaryString(a) + " >>> 1 = " + Integer.toBinaryString(a >>> 1));
// 右移
System.out.println(Integer.toBinaryString(b) + " >> 1 = " + Integer.toBinaryString(b >> 1));
// 无符号右移
System.out.println(Integer.toBinaryString(b) + " >>> 1 = " + Integer.toBinaryString(b >>> 1));
运行程序,结果如下:
最高位是符号位,0表示正数,1表示负数。
对于正数而言,右移与无符号右移结果相同。
对于负数而言,右移与无符号右移结果不同。
(四)课堂练习
- 编程计算下列位运算结果
1、23 & 34
2、23 | 34
3、23 ^ 34
4、~23
5、32 >> 2
6、-32 >> 2
7、32 >>> 2
8、-32 >>> 2
9、4 << 3
大家可以对照一下Python的位运算:
大家可以看到,Python里除了没有无符号右移运算符之外,其余位运算符跟Java完全一样。
以上是关于Java学习笔记2.3.5 运算符与表达式 - 位运算符的主要内容,如果未能解决你的问题,请参考以下文章