深入理解 Java 位运算符

Java 中的位运算符主要用于对整数值的二进制表示(比特位)执行直接操作。不同于处理整个数值,这些运算符能够逐位地处理数据,从而实现快速且高效的底层运算。

  • 位运算符仅适用于整数类型的数据,如 byte、short、int、long 和 char。
  • 它们常用于性能优化、系统编程以及竞技编程中。

什么是位运算符?

位运算符会根据指定的运算规则,单独处理数字中的每一个比特位。当执行位运算时,操作数的对应位会被评估并组合,从而生成结果。

下面是 Java 中可用的主要位运算符:

运算符

描述

&

按位与

\ 按位或 ^

按位异或

~

按位取反 (NOT)

<<

左移

>>

有符号右移

>>>

无符号右移现在,让我们深入了解 Java 中的每一个位运算符:

1. 按位与 (&)

这是一个二元运算符,用 ‘&‘ 表示。它返回输入值的逐位与结果。也就是说,如果两个位都是 1,结果为 1,否则为 0。

#### 示例:

> a = 5 = 0101 (二进制)

> b = 7 = 0111 (二进制)

>

> 5 和 7 的按位与运算

> 0101

> & 0111

>

> 0101 = 5 (十进制)

2. 按位或 (|)

这是一个二元运算符,用 ‘|‘ 表示。它返回输入值的逐位或结果。也就是说,如果任意一个位是 1,结果为 1,否则为 0。

#### 示例:

> a = 5 = 0101 (二进制)

> b = 7 = 0111 (二进制)

>

> 5 和 7 的按位或运算

> 0101

> | 0111

>

> 0111 = 7 (十进制)

3. 按位异或 (^)

这是一个二元运算符,用 ‘^‘ 表示。它返回输入值的逐位异或结果。也就是说,如果对应的位不同,结果为 1,否则为 0。

#### 示例:

> a = 5 = 0101 (二进制)

> b = 7 = 0111 (二进制)

>

> 5 和 7 的按位异或运算

> 0101

> ^ 0111

>

> 0010 = 2 (十进制)

4. 按位取反 (~)

这是一个一元运算符,用 ‘~‘ 表示。它返回输入值的一进制补码表示,即将所有位反转,这意味着它把每个 0 变成 1,每个 1 变成 0。

#### 示例:

> a = 5 = 0101 (二进制)

>

> Java 中 5 的按位取反运算 (8 bit)

>

> ~ 00000101

>

> 11111010 = -6 (十进制)

解释: 5 的按位取反结果是 11111010,这在二进制补码格式中表示 -6。N 的二进制补码是 ~N + 1,所以 ~5 的结果是 -6。

Java 中按位取反运算符的“玄机”

5 的按位取反是 246,而 246 的二进制补码是 -6。因此,输出结果是 -6 而不是 246。

> N 的按位取反 = ~N (以二进制补码形式表示)

> ~N 的二进制补码 = -(~(~N)+1) = -(N+1)。

例如: 一个数的二进制补码等于该数的补码 + 1 。

!Bitwise complement2‘s Complement

演示: 这里是一个展示所有位运算符的 Java 程序。

Java


CODEBLOCK_5116a3c9

Output

a&b = 5
a|b = 7
a^b = 2
~a = -6
a= 5

带有二进制输出的位运算符

示例: 这是一个使用二进制字符串展示位运算的 Java 程序。

Java

`

class Geeks {
    public static void main (String[] args) {
      
        String binary[]={
          "0000","0001","0010","0011","0100","0101",
          "0110","0111","1000","1001","1010",
          "1011","1100","1101","1110","1111"
        };
      
      // initializing the values of a and b 
      int a=3; // 0+2+1 or 0011 in binary
      int b=6; // 4+2+0 or 0110 in binary
      
      // bitwise or
      int c= a | b;
      
      // bitwise and
      int d= a & b;
      
      // bitwise xor
      int e= a ^ b;
      
      // bitwise not
      int f= (~a & b)|(a &~b);
      int g= ~a &
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/34000.html
点赞
0.00 平均评分 (0% 分数) - 0