Java中移位操作运算符的理解(java中移位运算符包括)

createh52个月前 (04-30)技术教程26

java中的移位运算符有三种:

1、 <<: 左移

2、 >>: 右移

3、 >>>: 无符号右移

使用方法:左移就是将左边的操作数在内存中的二进制数据左移指定的位数,左边移空的部分补零,右移:如果最高位是0,空位就填0,如果最高位是1,空位就填1。无符号右移无论最高位是什么,空位都补零。

数据在内存中以补码的形式存储

左移和右移的数学意义:

对于左移,对于整型a, a<<n=a*2^n(前提是结果在整型的范围之内),对于右移 正的整型a, a>>n=a/2^n,对于负的整型a,a>>n=-(|a|/2^n+1);

为什么对于右移,正数和负数的结果不一样呢?

我们可以看一个例子:

package sort;

public class sort1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    int a=-123;
    System.out.println("原二进制位:"+Integer.toBinaryString(a));
    int b=a>>2;
    System.out.println("右移两位结果为:"+b);
    System.out.println("右移后二进制位:"+Integer.toBinaryString(b));
    int c=123;
    System.out.println("原二进制位:"+Integer.toBinaryString(c));
    int d=c>>2;
    System.out.println("右移后的结果为:"+d);
    System.out.println("右移后二进制位:"+Integer.toBinaryString(d));
    }
}

运行结果为:

对于123,其二进制数为0 1111011,右移两位相当于把0 111000右移两位,而0 111000的十进制为120,所以结果为120/4=30;

对于-123,其二进制数为1 0000101,右移两位相当于把1 0000100右移两位,而1 0000100的十进制为-124,所以结果为-124/4=-31。

相关文章

Java 中的移位运算符(Shift Operator)

针对移位(Shift Operator)操作符是最基本的操作符之一,几乎每种编程语言都包含这一操作符。同时我们对移位运算又会觉得比较陌生和困惑,这是因为移位运算除了在 JDK 底层你会遇到不少,还有就...

Java开发中的异常处理艺术(java开发中的异常处理艺术有哪些)

Java开发中的异常处理艺术在Java开发的世界里,异常处理是一门艺术。它不仅仅是编写代码的一部分,更是一种策略性的思维模式,一种让你的程序更加健壮和可靠的手段。让我们一起探索这门艺术的魅力所在。异常...

Java入门必看!Java运算符(超详细)

“这里是offer学堂,帮你轻松拿offer”嗨~ 今天的你过得还好吗?明天就是周六啦!所以今天最重要的任务就是等下班!又一波干货来袭!速速收藏!- 2023.03.17 -不知不觉又到周五啦,大家是...

Java中的运算符(java中的运算符号)

1 运算符运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。具体包含以下六种运算符。算术运算符、赋值运算符、比较运算符(关系运算符)、逻辑运算符、位运算符、三元运算符。2 算术运算符运算符运算...

一口气说出 9种 分布式ID生成方式,面试官有点懵了

以下文章来源于程序员内点事 ,作者程序员内点事一、为什么要用分布式ID?在说分布式ID的具体实现之前,我们来简单分析一下为什么用分布式ID?分布式ID应该满足哪些特征?1、什么是分布式ID?拿MySQ...

90%程序员不知道的Java流程控制优化技巧,让你的代码更高效!

本文将全面介绍Java中的流程控制结构,包括条件语句(if/else, switch)和循环结构(for, while, do-while),并提供丰富的示例代码和对比分析。一、条件语句结构语法适用场...