0
点赞
收藏
分享

微信扫一扫

Java学习笔记2.3.5 运算符与表达式 - 位运算符

颜娘娘的碎碎念 2022-03-11 阅读 88

文章目录

零、本讲学习目标

  1. 理解位运算的含义
  2. 掌握位运算的使用

一、位运算符概念

  • 位运算符是针对二进制数的每一位进行运算的符号,它专门针对数字0和1进行操作。

二、位运算符使用

(一)分类说明表

运算符运算范例结果
&按位与a & ba和b每一位进行“与”操作后的结果
|按位或a | ba和b每一位进行“或”操作后的结果
~取反~ aa的每一位进行“非”操作后的结果
^按位异或a ^ ba和b每一位进行“异或”操作后的结果
<<左移a << b将a左移b位,右边空位用0填充
>>右移a >> b将a右移b位,丢弃被移出位,左边最高位用0或1填充
>>>无符号右移a >>> b将a右移b位,丢弃被移出位,左边最高位用0填充
  • 按位与运算真值表
&01
000
101
  • 按位或运算真值表
|01
001
111
  • 按位异或运算真值表
^01
001
110
  • 取反运算真值表
~01
10

(二)注意事项

位运算符本质都是针对二进制数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表示负数。
对于正数而言,右移与无符号右移结果相同。
对于负数而言,右移与无符号右移结果不同。

(四)课堂练习

  • 编程计算下列位运算结果
123 & 34
223 | 34
323 ^ 34
4~23
532 >> 2
6-32 >> 2
732 >>> 2
8-32 >>> 2
94 << 3

在这里插入图片描述
大家可以对照一下Python的位运算:
在这里插入图片描述
大家可以看到,Python里除了没有无符号右移运算符之外,其余位运算符跟Java完全一样。

举报

相关推荐

0 条评论