Java基础语法:二进制与位运算

70 阅读4分钟

介绍

Java是一种广泛使用的面向对象程序设计语言,它提供了丰富的语法和工具来处理各种数据类型。在计算机科学中,二进制和位运算是非常基础且重要的概念。本文将介绍Java中的二进制表示法以及常用的位运算符(与、或、非)。

二进制表示法

在计算机中,所有的数据都是以二进制形式存储的。二进制数由0和1组成,每一位称为一个比特(bit)。例如,十进制数5在二进制中表示为101。

二进制转换

  • 十进制转二进制

    • 例如,将十进制数13转换为二进制:

      113 ÷ 2 = 61
      26 ÷ 2 = 30
      33 ÷ 2 = 11
      41 ÷ 2 = 01
      

      从下往上读取余数,得到13的二进制表示为1101。

  • 二进制转十进制

    • 例如,将二进制数1101转换为十进制:

      11 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 8 + 4 + 0 + 1 = 13
      

位运算符

位运算符直接操作二进制位,它们在处理低级数据时非常有用。Java中常用的位运算符包括与(&)、或(|)、非(~)等。

与运算符(&)

与运算符对两个操作数的每一位执行逻辑与操作。如果两个相应的二进制位都为1,则结果为1;否则为0。

1int a = 5;   // 二进制: 0101
2int b = 3;   // 二进制: 0011
3int result = a & b;  // 二进制: 0001 (十进制: 1)
4System.out.println(result);  // 输出: 1

或运算符(|)

或运算符对两个操作数的每一位执行逻辑或操作。如果两个相应的二进制位有一个为1,则结果为1;否则为0。

1int a = 5;   // 二进制: 0101
2int b = 3;   // 二进制: 0011
3int result = a | b;  // 二进制: 0111 (十进制: 7)
4System.out.println(result);  // 输出: 7

非运算符(~)

非运算符对操作数的每一位执行逻辑非操作。如果二进制位为1,则结果为0;如果二进制位为0,则结果为1。

1int a = 5;   // 二进制: 0101
2int result = ~a;  // 二进制: 1010 (由于Java使用补码表示负数,实际结果为-6)
3System.out.println(result);  // 输出: -6

异或运算符(^)

异或运算符对两个操作数的每一位执行逻辑异或操作。如果两个相应的二进制位不同,则结果为1;否则为0。

1int a = 5;   // 二进制: 0101
2int b = 3;   // 二进制: 0011
3int result = a ^ b;  // 二进制: 0110 (十进制: 6)
4System.out.println(result);  // 输出: 6

左移运算符(<<)

左移运算符将操作数的所有位向左移动指定的位数。左边的空位用0填充,右边的位被丢弃。

1int a = 5;   // 二进制: 0101
2int result = a << 1;  // 二进制: 1010 (十进制: 10)
3System.out.println(result);  // 输出: 10

右移运算符(>>)

右移运算符将操作数的所有位向右移动指定的位数。对于正数,左边的空位用0填充;对于负数,左边的空位用1填充。

1int a = 5;   // 二进制: 0101
2int result = a >> 1;  // 二进制: 0010 (十进制: 2)
3System.out.println(result);  // 输出: 2

无符号右移运算符(>>>)

无符号右移运算符将操作数的所有位向右移动指定的位数。无论操作数是正数还是负数,左边的空位都用0填充。

1int a = -5;  // 二进制: 1111 1111 1111 1111 1111 1111 1111 1011
2int result = a >>> 1;  // 二进制: 0111 1111 1111 1111 1111 1111 1111 1101 (十进制: 2147483643)
3System.out.println(result);  // 输出: 2147483643

应用示例

检查奇偶性

利用位运算符可以高效地检查一个整数是否为奇数或偶数。

1public static boolean isEven(int num) {
2    return (num & 1) == 0;
3}
4
5public static void main(String[] args) {
6    int num = 4;
7    if (isEven(num)) {
8        System.out.println(num + " 是偶数");
9    } else {
10        System.out.println(num + " 是奇数");
11    }
12}

交换两个变量的值

使用异或运算符可以不借助临时变量交换两个变量的值。

1public static void swap(int a, int b) {
2    a = a ^ b;
3    b = a ^ b;
4    a = a ^ b;
5    System.out.println("a = " + a + ", b = " + b);
6}
7
8public static void main(String[] args) {
9    int a = 5;
10    int b = 10;
11    swap(a, b);  // 输出: a = 10, b = 5
12}

总结

二进制和位运算是计算机科学的基础,掌握这些概念对于理解和编写高效的代码非常重要。通过本文的学习,您应该能够理解二进制的基本概念,并能够在Java编程中灵活运用位运算符。希望这篇指南能够帮助您更好地掌握Java基础语法!