关于数字的位运算

这篇博客深入探讨了数字的位运算,包括十进制转二进制、左移位移`<<`、右移位移`>>`、按位或`|`、按位与`&`、按位异或`^`以及取反`~`。文章通过实例解释了每个运算符的工作原理,并提供了相关的数学表示。
摘要由CSDN通过智能技术生成

说明

这里主要就是研究一下关于位计算的一些案例,所有的举例参数都使用int来操作,结果输出也是如此

正文

十进制转换二进制方法

    private String DecimalToBinary(int decimal) {
        return Integer.toBinaryString(decimal);
    }

<< 左位移

a << b : 表示将一个二进制的数字a向左移动b位(在末尾追加b个0),相当于 a × Math.pow(2, b)

    public void Test_004() {
        int a = 10;
        int b = 5;
        System.out.println(a);
        System.out.println(a << b);
        System.out.println(a * Math.pow(2, b));
        System.out.println(DecimalToBinary(a));
        System.out.println(DecimalToBinary(a << b));
    }

输出:

10
320
320.0
1010
101000000

>> 右位移

a << b : 表示将一个二进制的数字a向右移动b位(即从末尾开始删除b位),相当于 a / Math.pow(2, b)。
如果a转化为二进制的长度小于b位,则值为0

    public void Test_004() {
        int a = 10;
        int b = 5;
        System.out.println(a);
        System.out.println(a >> b);
        System.out.println(a / Math.pow(2, b));
        System.out.println(DecimalToBinary(a));
        System.out.println(DecimalToBinary(a >> b));
    }

结果:

10
0
0.3125
1010
0
    public void Test_004() {
        int a = 6431;
        int b = 5;
        System.out.println(a);
        System.out.println(a >> b);
        System.out.println(a / Math.pow(2, b));
        System.out.println(DecimalToBinary(a));
        System.out.println(DecimalToBinary(a >> b));
    }

结果:

6431
200
200.96875
1100100011111
11001000

| 或运算

举个例子

100      => 1100100
15       => 0001111
100 | 15 => 1101111
15 | 100 => 1101111

两个数字都转换二进制后,从最后一位开始,开始计算新的数据
0为false,1为true,然后按照0|1的顺序依次计算

均为0             => false | false  => false  => 0
均为1             =>  true | true   => true   => 1
一个为0,一个为1   => false | true   => true   => 1

& 并运算

继续举例子

100      => 1100100
15       => 0001111
100 & 15 => 0000100
15 & 100 => 0000100

两个数字都转换二进制后,从最后一位开始,开始计算新的数据
0为false,1为true,然后按照0|1的顺序依次计算

均为0             =>  false & false  => false   => 0
均为1             =>   true & true   => true    => 1
一个为0,一个为1   =>  false & true   => false   => 1

^异或运算

例子继续

100      => 1100100
15       => 0001111
100 ^ 15 => 1101011
15 ^ 100 => 1101011

两个数字都转换二进制后,从最后一位开始,开始计算新的数据
0为false,1为true,然后按照0|1的顺序依次计算

两个数字相同 => true  => 0
两个数字不同 => false => 1

此外,逆运算的结果等于数据本身:a ^ b ^ b = a;

~取反运算

举例之前说明一点,上面的例子中,因为运算都是从末位开始的,因此十进制转换为二进制后,前面的0在不需要的情况下都已经舍去了。
取反运算(~)是从二进制首位开始计算的,因此,首先必须明确一件事:int的二进制全长为32位。

15   => 00000000000000000000000000001111  => 15
~15  => 11111111111111111111111111110000  => -16

将一个数字转换为完整的二进制,从第一位开始,如果是0,则取值1,如果是1,则取值0,直到最后一位。
转换为数学运算:~a = -1 × a - 1;
此外,~~a = ~(~a) = a;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值