4. JavaSE ——【移位运算符】


📖 开场白


亲爱的读者,大家好!我是一名正在学习编程的高校生。在这个博客里,我将和大家一起探讨编程技巧、分享实用工具,并交流学习心得。希望通过我的博客,你能学到有用的知识,提高自己的技能,成为一名优秀的程序员。如果你有任何疑问或建议,请随时在评论区留言,让我们一起成长进步!现在,让我们开始这场知识之旅吧!


在这里插入图片描述


📑本人主页:三亿老奶奶心中的梦
🔖收入专栏:JavaSE



📖 前言

本章节将会讲解,什么是移位运算符,如何去使用移位运算符!如有错误,还请指出,非常感谢!!!


📖 1. 移位运算符


移位运算符,在Java中有3种,分别是:

  1. 左移(<<)
  2. 右移(>>)
  3. 无符号右移(>>>)

这些移位运算符都是双目运算并且都是对二进制进行移位!!!


🔖1.1 左移(<<)


左移(<<),是对一个数的二进制位进行移位,操作的就是这个数的二进制位,那么它的运算规则是:左边丢弃,右边补0

图表 1.1
在这里插入图片描述


对正数移位:

public class TestDemo {
    public static void main(String[] args) {
        int a = 6;
        int b = a << 1;
        System.out.println("a << 1 = " + b);
    }

运行结果:

在这里插入图片描述

分析:

  1. 左移运算符的规则是左边丢弃,右边补0,并且移位的是二进制位,我们先写出 int a = 6 的二进制位
  2. 随后进行 a << 1,就得到了 12,对于一些数左移可以说有着乘2的效果,但是并不是所有的数都有着乘2效果
  3. 当左移n位,右边就补n个0,例如:左边移1位,右边补1个0;左移2位,右边补2个0
    在这里插入图片描述

对负数移位:

public class TestDemo {
    public static void main(String[] args) {
        int a = -10;
        int b = a << 1;
        System.out.println("a << 1 = " + b);
    }

运行结果:

在这里插入图片描述

分析:

  1. 首先,写出这个数的二进制位,如果是负数,原反补码不同,如果是正数,它的原反补码相同
    在这里插入图片描述
  2. 进行 a << 1 ,得到下图,得到的补码需要进行转换为原码
    在这里插入图片描述

🔖1.2 右移(>>)


右移(>>),同样的是对一个数的二进制位进行移位,那么它的运算规则是:右边丢弃,左边补原符号位(原符号位是左边第一位数,其他位数为数值位)

图标1.2

在这里插入图片描述


对正数进行移位:

public class TestDemo {
    public static void main(String[] args) {
        int a = 8;
        int b = a >> 1;
        System.out.println("a >> 1 = " + b);
    }

运行结果:

在这里插入图片描述

分析:

  1. 对于右移,同样需要写出被右移数的二进制位
    在这里插入图片描述
  2. 进行 a >> 1 ,最终得到,也就说当右移n位,右边的值就丢弃n位,而左边的值看原符号位来补n位(原符号位是左边第一位数,其他位数为数值位)
    在这里插入图片描述

对负数进行移位:

public class TestDemo {
    public static void main(String[] args) {
        int a = -4;
        int b = a >> 1;
        System.out.println("a >> 1 = " + b);
    }

运行结果:

在这里插入图片描述

分析:

  1. 对于右移负数,我们需要写出它的原码,反码,补码
    在这里插入图片描述
  2. 随后对补码进行 a >> 1 ,右边的值丢弃n位,左边就补齐n位原符号的值
    在这里插入图片描述

🔖1.3 无符号右移(>>>)


无符号右移(>>>),同样的是对一个数的二进制位,进行移位,那么它的运算规则是:右边丢弃,左边补0

图标1.3

在这里插入图片描述


无符号右移正数:

public class TestDemo {
    public static void main(String[] args) {
        int a = 4;
        int b = a >>> 1;
        System.out.println("a >>> 1 = " + b);
    }

运行结果:

在这里插入图片描述

分析:

  1. 首先,写出这个被无符号右移数的二进制位
  2. 进行 a >>> 1,右边丢弃n位,左边补n个0
    在这里插入图片描述

对负数进行 >>>

public class TestDemo {
    public static void main(String[] args) {
        int a = -4;
        int b = a >>> 1;
        System.out.println("a >>> 1 = " + b);
    }

运行结果:

在这里插入图片描述

分析:

  1. 首先,写出该数的二进制位,随后对补码进行 a >>> 1,最终得到一个很大的数 在这里插入图片描述
    在这里插入图片描述

📖 总结


  1. 移位不要移动小数位!!!
    在这里插入图片描述
  2. 移位不要移动太大的数

📖 结束语


非常感谢您花时间阅读我的博客,希望我的分享能为您带来收获。如果您对本文有任何想法或疑问,欢迎在评论区留言交流。如果您喜欢我的博客,请继续关注,我会定期更新更多精彩内容。最后,别忘了行动起来的力量,让我们一起实践这些方法,见证自己的成长和进步!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值