`
kanpiaoxue
  • 浏览: 1781205 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java 位移运算符

 
阅读更多

 

参考文章:

1、【精华】https://zhuanlan.zhihu.com/p/30108890

2、【精华】https://baike.baidu.com/item/%E7%A7%BB%E4%BD%8D%E8%BF%90%E7%AE%97%E7%AC%A6

 3、https://juejin.cn/post/6844903783307149319

 

public static void test() throws Exception {

    int intValue = 5;// 随意写一个数
    /**
     * 数学意义:
     * 在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
     * java 的 int 的位移操作:
     * 根据这个规则,左移32位后,右边补上32个0值是不是就变成了十进制的0了?
     * 答案是NO,当int类型进行左移操作时,左移位数大于等于32位操作时,会先求余(%)后再进行左移操作。
     * 也就是说左移32位相当于不进行移位操作,左移40位相当于左移8位(40%32=8)。
     * java 的 long 的位移操作:
     * 当long类型进行左移操作时,long类型在二进制中的体现是64位的,因此求余操作的基数也变成了64,
     * 也就是说左移64位相当于没有移位,左移72位相当于左移8位(72%64=8)
     * 
     * <pre>
     * ==== 左移:
     *  数学意义:
     *   在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
     *   value << n 等于 value * Math.pow(2, n) 【注意】Math.pow(double, double) 是double操作
     *   如: 7 << 3 == 56 ,对比 7 * Math.pow(2, 3) = 56.0
     * 溢出情况:
     * java 的 int 的位移操作:
     * 根据这个规则,左移32位后,右边补上32个0值是不是就变成了十进制的0了?
     * 答案是NO,当int类型进行左移操作时,左移位数大于等于32位操作时,会先求余(%)后再进行左移操作。
     * 也就是说左移32位相当于不进行移位操作,左移40位相当于左移8位(40%32=8)。
     * java 的 long 的位移操作:
     * 当long类型进行左移操作时,long类型在二进制中的体现是64位的,因此求余操作的基数也变成了64,
     * 也就是说左移64位相当于没有移位,左移72位相当于左移8位(72%64=8)
     * 
     * ==== 右移:
     * 数学意义:
     *  右移一位相当于除2,右移n位相当于除以2的n次方。
     *  value >> n 等于 value / Math.pow(2, n)
     *  如:8 >> 3 == 1 ,对比 8 / Math.pow(2, 3) = 1.0
     * 溢出情况:
     *  和左移一样,int类型移位大于等于32位时,long类型大于等于64位时,会先做求余处理再位移处理,byte,short移位前会先转换为int类型(32位)再进行移位。
     * 
     * </pre>
     */
    System.out.println("intValue:" + (intValue));// 打印intValue
    System.out.println("intValue左移1位:" + (intValue << 1));// 左移1位
    System.out.println("intValue左移8位:" + (intValue << 8));// 左移8位
    // 当int类型左移位数大于等于32位操作时,会先求余后再进行移位操作
    System.out.println("intValue左移32位:" + (intValue << 32));// 求余为32%32=0,相当于左移0位(不移位)
    System.out.println("intValue左移40位:" + (intValue << 40));// 求余为40%32=8,相当于左移8位
    System.out.println("intValue左移64位:" + (intValue << 64));// 求余为64%32=0,相当于左移0位(不移位)

    long longValue = 5L;
    System.out.println("longValue:" + (longValue));// 打印longValue
    System.out.println("longValue左移1位:" + (longValue << 1));// 左移1位
    System.out.println("longValue左移8位:" + (longValue << 8));// 左移8位
    // 当long类型左移位数大于等于64位操作时,会先求余后再进行移位操作
    System.out.println("longValue左移64位:" + (longValue << 64));// 求余为64%64=0,相当于左移0位(不移位)
    System.out.println("longValue左移72位:" + (longValue << 72));// 求余为72%64=8,相当于左移8位
    System.out.println("longValue左移128位:" + (longValue << 128));// 求余为128%64=0,相当于左移0位(不移位)

    System.out.println(String.format("%s == %s", 7 << 3, 7 * Math.pow(2, 3)));
    System.out.println(String.format("%s == %s", 8 >> 3, 8 / Math.pow(2, 3)));

}

 

 

左移运算符(<<)规则编辑:

数学意义:

    在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

 

右移运算符(>>)规则:

数学意义:

    右移一位相当于除2,右移n位相当于除以2的n次方。

 

无符号右移运算符(>>>)规则:

    按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。

分享到:
评论

相关推荐

    java位运算符.pdf

    位运算符分为两大类:位逻辑运算符和位移运算符。位逻辑运算符包括按位与(AND)、按位或(OR)、按位异或(XOR)和按位非(NOT)。位移运算符则有右移(&gt;&gt;&gt;和&gt;&gt;)和左移()。 1. **位逻辑运算符**: - **按位非...

    Java移位运算符详解实例(小结)

    Java移位运算符是Java语言中的一种基本运算符,用于对二进制数进行位移操作。移位运算符主要包括左移位运算符()、右移位运算符(&gt;&gt;&gt;)和带符号的右移位运算符(&gt;&gt;)。这些运算符可以单独用来处理int型整数。 1. ...

    Java移位运算符1

    在Java编程语言中,移位运算符是一种高效的方式来进行位操作,它们对于处理二进制数据和进行快速的乘法、除法等计算非常有用。本文将深入探讨Java中的三种移位运算符:左移运算符(),右移运算符(&gt;&gt;)以及无符号右...

    Java运算符+(优先级、目数)+.doc

    11. **位移运算符(, &gt;&gt;, &gt;&gt;&gt;):** 左移位运算符将二进制位向左移动指定位数,右移位运算符则向右移动。无符号右移运算符对负数也会填零。这些都是双目的运算符,从左到右结合。 12. **关系运算符(&lt;, &gt;, , &gt;=, ...

    李妍的Java学习之路-Java运算符

    位运算符,如 AND (&), OR (|), XOR (^), NOT (~) 以及位移运算符 (, &gt;&gt;, &gt;&gt;&gt;),作用于整数类型的二进制表示。位运算符直接操作二进制位,例如 `a & b` 会返回 `a` 和 `b` 的二进制与运算结果。位移运算符会改变数字...

    Java运算符常见面试题及答案

    11. **位移运算符**:左移()和右移(&gt;&gt;)用于将二进制位向左或向右移动指定的位数。例如,`5 将返回20(二进制表示为101左移两位变为10100)。 12. **取反运算符**:`~`用于对整数进行按位取反,将0变为1,将1...

    java运算符优先级[借鉴].pdf

    这些运算符用于执行位移操作。 8. 小于(&lt;)、大于(&gt;)、小于或等于()、大于或等于(&gt;=):从左到右 这些运算符用于比较两个操作数的大小关系。 9. 等于(==)、不等于(!=):从左到右 这些运算符用于比较两个...

    10_02.rar_10_02_java 位移

    3. 位移运算符:深入理解、&gt;&gt;和&gt;&gt;&gt;的用法及它们对二进制数据的影响。 4. 图形生成:如何通过编程实现分形山的可视化。 5. 注释规范:良好的编程习惯,通过注释解释关键代码的功能和作用。 通过分析并运行这个程序,...

    Java运算符.docx

    在Java中,运算符可以分为多个类别,包括算术运算符、关系运算符、逻辑运算符、赋值运算符以及位运算符。 1. **算术运算符**:包括`+`、`-`、`*`、`/`、`%`、`++`和`--`。除法运算`/`中,除数不能为0,否则会抛出`...

    Java运算符优先级别.doc

    5. **位移运算符** `, `&gt;&gt;`, `&gt;&gt;&gt;`:从左到右结合。 - **左移** `将二进制数的各位向左移动。 - **右移** `&gt;&gt;`:将二进制数的各位向右移动。 - **无符号右移** `&gt;&gt;&gt;`:与右移类似,但高位补0。 6. **比较运算符*...

    Java编程详细教程运算符表达式流程控制上PPT教案学习.pptx

    位移运算符`和`&gt;&gt;`分别用于左移和右移位,`&gt;&gt;&gt;`是无符号右移,移位过程中高位不会填充符号位。 最后,赋值运算符允许我们简洁地进行赋值操作,比如`x+=y`相当于`x = x + y`。同时,Java支持将其他运算符与赋值...

    Java运算符 &#40;优先级、目数&#41; [1].doc

    - 移位运算符`、`&gt;&gt;`和`&gt;&gt;&gt;`用于位移操作,`是左移,`&gt;&gt;`是带符号右移,`&gt;&gt;&gt;`是无符号右移。 - 关系运算符`、`&gt;`、`、`&gt;=`用于比较,`instanceof`用来检查对象是否属于特定类或其子类。 - 等于`==`和不等于`!=`...

    Java SE-基础篇-运算符、随机数(Random)、方法、数组-入门级讲解

    - 位运算符:如按位取反(`~`), 按位与(`&`), 按位或(`|`), 按位异或(`^`)以及位移运算符,如左移(`), 带符号右移(`&gt;&gt;`)和无符号右移(`&gt;&gt;&gt;`)。位移运算符常用于快速计算乘法和除法。 2. 随机数(Random): Java中...

    Java程序设计基础:运算符与表达式.pptx

    ### Java程序设计基础:运算符与表达式 #### 一、引言 在Java程序设计中,理解和掌握运算符与表达式的使用是非常重要的基础技能。本文将深入探讨Java中的各种运算符及其用法,并通过实例讲解如何正确地使用这些...

    Java操作符的优先级和结合性

    6. 移位运算符:`、`&gt;&gt;`、`&gt;&gt;&gt;` —— 从左到右执行,用于位移操作,如 `a 。 7. 关系运算符:`、`、`&gt;`、`&gt;=`、`instanceof` —— 从左到右执行,用于比较操作,如 `a 。 8. 相等运算符:`==`、`!=` —— 从左到右...

    浅析Java语言在计算机软件开发中的应用.pdf

    Java语言的运算符包括赋值运算符、关系运算符、算数运算符、逻辑运算符、条件运算符、位运算符和位移运算符七种。Java语言的运算符可以操作常量与变量,Java语言的运算符对编程表达形式有各自特别的要求。在运算时...

    JAVA工程师笔试题汇总(免费)

    知识点6:Java位移操作符 在Java中,有两种位移操作符:&gt;&gt;和&gt;&gt;&gt;. &gt;&gt;是带符号位移操作符,&gt;&gt;&gt;是无符号位移操作符。例如,1010 0000 0000 0000 0000 0000 0000 0000 &gt;&gt; 4将结果为0000 1010 0000 0000 0000 0000 0000 ...

    JAVA选择题复习.txt

    - Java中的位移运算符包括`&gt;&gt;`(右移)、`(左移)和`&gt;&gt;&gt;`(无符号右移)。 #### 19. 位运算操作 - `&gt;&gt;&gt;`为无符号右移运算符,用于将二进制数进行右移操作,高位补零。 #### 20. 浮点数取模运算 - 浮点数也可以...

Global site tag (gtag.js) - Google Analytics