参考文章:
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次方。
无符号右移运算符(>>>)规则:
按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。
相关推荐
位运算符分为两大类:位逻辑运算符和位移运算符。位逻辑运算符包括按位与(AND)、按位或(OR)、按位异或(XOR)和按位非(NOT)。位移运算符则有右移(>>>和>>)和左移()。 1. **位逻辑运算符**: - **按位非...
Java移位运算符是Java语言中的一种基本运算符,用于对二进制数进行位移操作。移位运算符主要包括左移位运算符()、右移位运算符(>>>)和带符号的右移位运算符(>>)。这些运算符可以单独用来处理int型整数。 1. ...
在Java编程语言中,移位运算符是一种高效的方式来进行位操作,它们对于处理二进制数据和进行快速的乘法、除法等计算非常有用。本文将深入探讨Java中的三种移位运算符:左移运算符(),右移运算符(>>)以及无符号右...
11. **位移运算符(, >>, >>>):** 左移位运算符将二进制位向左移动指定位数,右移位运算符则向右移动。无符号右移运算符对负数也会填零。这些都是双目的运算符,从左到右结合。 12. **关系运算符(<, >, , >=, ...
位运算符,如 AND (&), OR (|), XOR (^), NOT (~) 以及位移运算符 (, >>, >>>),作用于整数类型的二进制表示。位运算符直接操作二进制位,例如 `a & b` 会返回 `a` 和 `b` 的二进制与运算结果。位移运算符会改变数字...
11. **位移运算符**:左移()和右移(>>)用于将二进制位向左或向右移动指定的位数。例如,`5 将返回20(二进制表示为101左移两位变为10100)。 12. **取反运算符**:`~`用于对整数进行按位取反,将0变为1,将1...
这些运算符用于执行位移操作。 8. 小于(<)、大于(>)、小于或等于()、大于或等于(>=):从左到右 这些运算符用于比较两个操作数的大小关系。 9. 等于(==)、不等于(!=):从左到右 这些运算符用于比较两个...
3. 位移运算符:深入理解、>>和>>>的用法及它们对二进制数据的影响。 4. 图形生成:如何通过编程实现分形山的可视化。 5. 注释规范:良好的编程习惯,通过注释解释关键代码的功能和作用。 通过分析并运行这个程序,...
在Java中,运算符可以分为多个类别,包括算术运算符、关系运算符、逻辑运算符、赋值运算符以及位运算符。 1. **算术运算符**:包括`+`、`-`、`*`、`/`、`%`、`++`和`--`。除法运算`/`中,除数不能为0,否则会抛出`...
5. **位移运算符** `, `>>`, `>>>`:从左到右结合。 - **左移** `将二进制数的各位向左移动。 - **右移** `>>`:将二进制数的各位向右移动。 - **无符号右移** `>>>`:与右移类似,但高位补0。 6. **比较运算符*...
位移运算符`和`>>`分别用于左移和右移位,`>>>`是无符号右移,移位过程中高位不会填充符号位。 最后,赋值运算符允许我们简洁地进行赋值操作,比如`x+=y`相当于`x = x + y`。同时,Java支持将其他运算符与赋值...
- 移位运算符`、`>>`和`>>>`用于位移操作,`是左移,`>>`是带符号右移,`>>>`是无符号右移。 - 关系运算符`、`>`、`、`>=`用于比较,`instanceof`用来检查对象是否属于特定类或其子类。 - 等于`==`和不等于`!=`...
- 位运算符:如按位取反(`~`), 按位与(`&`), 按位或(`|`), 按位异或(`^`)以及位移运算符,如左移(`), 带符号右移(`>>`)和无符号右移(`>>>`)。位移运算符常用于快速计算乘法和除法。 2. 随机数(Random): Java中...
### Java程序设计基础:运算符与表达式 #### 一、引言 在Java程序设计中,理解和掌握运算符与表达式的使用是非常重要的基础技能。本文将深入探讨Java中的各种运算符及其用法,并通过实例讲解如何正确地使用这些...
6. 移位运算符:`、`>>`、`>>>` —— 从左到右执行,用于位移操作,如 `a 。 7. 关系运算符:`、`、`>`、`>=`、`instanceof` —— 从左到右执行,用于比较操作,如 `a 。 8. 相等运算符:`==`、`!=` —— 从左到右...
Java语言的运算符包括赋值运算符、关系运算符、算数运算符、逻辑运算符、条件运算符、位运算符和位移运算符七种。Java语言的运算符可以操作常量与变量,Java语言的运算符对编程表达形式有各自特别的要求。在运算时...
知识点6:Java位移操作符 在Java中,有两种位移操作符:>>和>>>. >>是带符号位移操作符,>>>是无符号位移操作符。例如,1010 0000 0000 0000 0000 0000 0000 0000 >> 4将结果为0000 1010 0000 0000 0000 0000 0000 ...
- Java中的位移运算符包括`>>`(右移)、`(左移)和`>>>`(无符号右移)。 #### 19. 位运算操作 - `>>>`为无符号右移运算符,用于将二进制数进行右移操作,高位补零。 #### 20. 浮点数取模运算 - 浮点数也可以...