Java运算符

本文深入讲解Java中的位运算符,包括&(与)、|(或)、^(异或)、~(非)。通过实例演示了如何进行十进制与二进制的转换,并详细解析了各种位运算符的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

Java运算符 &(与)、|(或)、^(异或)、~(非),本文先简单了解这些,学习运算符之前,我们先来熟悉一下 进制之间的换算。

1、十进制和二进制运算

十进制转换二进制

我们先来看一段代码:

public static void main(String[] args) {
    String str = toBinary(10);
    System.out.println(str);
}
static String toBinary(int num) {
    String str = "";
    while (num != 0) {
        str = num % 2 + str;
        num = num / 2;
    }
    return str;
}

运行结果:1010

原理:十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。

例如10转二进制

  • 第一次除以2等于5(余数为0)
  • 第二次除以2等于2(余数为1),
  • 第三次除以2等于1(余数为0),最后余数1,

得到的余数依次是0 1 0 1。

反过来就是1010,计算机内部表示数的字节长度是固定的,比如8位,16位,32位。所以在高位补齐,java中字节码是8位的,所以高位补齐就是00001010.

二进制转换十进制

原理:要从右到左用二进制的每个数去乘以2的相应次方

例如:二进制数1010转化成十进制

1010 = 0*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 0 + 2 + 0 + 8 = 10

所以总结起来通用公式为:

A(n...cba)=a(2^0)+b(2^1)+c(2^2)+...+n(2^[n-1])

2、&(与)

位与运算符,两个数都转为二进制,然后从高位开始比较,如果两个数都为1则为1,否则为0

例如 8 & 11.

8转换二进制1000,11转换二进制1011,从高位开始比较,结果1000,转化十进制为8.

3、|(或)

位或运算符,两个数都转为二进制,然后从高位开始比较,两个数只要有一个为1则为1,否则就为0

例如 8 | 11.

8转换二进制1000,11转换二进制1011,从高位开始比较,结果1011,转化十进制为11.

4、^(异或)

位异或运算符,两个数转为二进制,然后从高位开始比较,如果相同则为0,不相同则为1

例如 8^ 11.

8转换二进制1000,11转换二进制1011,从高位开始比较,结果0011,转化十进制为3.

5、~(非)

位非运算符,如果位为0,结果是1,如果位为1,结果是0

例如 ~11.

11转换二进制1011,在Java中,所有数据的表示方法都是以补码的形式表示,如果没有特殊说明,Java中的数据类型默认是int,int数据类型的长度是8位,一位是四个字节,就是32字节。

补码后:00000000  00000000  00000000  00001011

取反为:11111111  11111111  11111111 11110100

因为高位为1,所以结果原码应为负数,负数的补码是其绝对值的原码取反,末尾在加1.

因此,我们需要对补码加1为:00000000  00000000  00000000  00001100

取反码:11111111  11111111  11111111 11110011

接下来,把上面结果取反得原码:

00000000  00000000  00000000  00001100 ,转化十进制为12

所以,~11 = -12

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值