参考文章:
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基础:运算符、算数运算符、赋值运算符、关系运算符、逻辑运算符、条件运算符、位移运算符、条件运算符、下标运算符;整型字面量、浮点字面量、字符字面量、 布尔型字面量、引用字面量、类型字面量
因为Java 使用2的补码来存储负数,并且因为Java 中的所有整数都是有符号的,这样应用位运算符可以容易地达到意想不到的结果。例如,不管你如何打算,Java 用高位来代表负数。为避免这个讨厌的意外,请记住不管高位的...
3.8.6 基本功训练6——位移实现数字乘以2的8次幂 86 3.9 情景应用——拓展与实践 86 3.9.1 情景应用1——输出长方形面积 86 3.9.2 情景应用2——输出字节bit位的值 87 3.9.3 情景应用3——判断奇偶数 88 3.9.4 ...
”:非运算符 54 3.4.4 逻辑运算符总结 54 3.5 三元运算符 55 3.6 位运算符 55 3.6.1 “&”:按位与运算符 56 3.6.2 “|”:按位或运算符 56 3.6.3 “^”:按位异或运算符 57 3.7 位移运算符 57 3.7.1 “>>”:带...
3.7.6 位移(shift)运算符(、、) 29 3.7.7 关系运算符(、、=、=、==、!=) 31 3.7.8 快速逻辑与(&&)和快速逻辑或(||) 32 3.7.9 位运算符:位与(&)、位或(|)、位异或(^) 34 3.7.10 三目运算符(?:) 35 3.7.11...
-运算符.流程控制 -.流程控制 -类.对象 -成员属性.成员方法 -成员方法.构造方法 -this.类变量 -类方法、封装 -访问修饰符.重载.覆盖 -约瑟夫问题 -多态 -抽象类、接口 -final.作业评讲 -作业、测试题 -数组 -排序、...
通过位运算中的"^"异或运算符把字符串与一个指定的值进行异或运算,从而改变字符串每个字符的值,这样就可以得到一个加密后的字符串
:)、位移运算符(|,&,<<,>>,~,^)和字符串运算符(+)。 可能很多人不知道”===”是什么。 在这里,我为大家解释一下,在javascript中,“==”是等同运算符。 等同运算符的比较规则: 当两个运算数的类型不同时:...
2.7.4 位移运算符 2.7.5 自加和自减 2.7.6 比较运算符 2.7.7 逻辑运算符 2.7.8 逗号运算符 2.7.9 空运算符 2.7.10 ?...:运算符 2.7.11 对象运算符 2.7.12 typeof运算符 2.7.13 运算符优先级 2.8 核心语句 2.8.1 基本...
2.7.4 位移运算符 2.7.5 自加和自减 2.7.6 比较运算符 2.7.7 逻辑运算符 2.7.8 逗号运算符 2.7.9 空运算符 2.7.10 ?...:运算符 2.7.11 对象运算符 2.7.12 typeof运算符 2.7.13 运算符优先级 2.8 核心语句 2.8.1 基本...
import java.util.ArrayList; import java.util.List; public class NumTest { public static void main(String[] args) { String s="ABCD";//原字符串 List<String> result = list(s, "");//列出字符的...
1) 运算符 + - * / **(指数操作符) 2) 关系 =(相当于JAVA中的==) > < <> != ~= ^= <= >= 3) 赋值 := 例子a:=2 4) 连接 || 例: 'abc' || 123 5) 标号 需要的标记 >> 6) 注释 --(单行) /* */(段落) 7) 替代...
10.4.3 CONNECT_BY_ROOT运算符 281 10.4.4 CONNECT_BY_ISCYCLE伪列和NOCYCLE参数 284 10.4.5 CONNECT_BY_ISLEAF伪列 287 10.5 小结 291 第11章 半联结和反联结 292 11.1 半联结 292 11.2 半联结执行计划 300 ...