必威体育Betway必威体育官网
当前位置:首页 > IT技术

Java中有三种移位运算符

时间:2019-08-17 00:12:08来源:IT技术作者:seo实验室小编阅读:62次「手机版」
 

移位运算

java中有三种移位运算符

<<      :     左移运算符,0001 << 1,结果是0010

>>      :     右移运算符,0010 >> 1,结果是0001

>>>    :     无符号右移,忽略符号位,空位都以0补齐

  • “>>>”无符号右移位操作符,无论符号是正负,都在高位插入0(都变成了正数)。

-1>>>1得到的结果是2147483647,是integer的最大值。

-1的二进制补码

1111 1111 1111 1111 1111 1111 1111 1111

右移一位,在最左边空出的一位插入0,变成了32位整数的最大值:

0111 1111 1111 1111 1111 1111 1111 1111

结果是2147483647

  • 快速算出移位运算符结果方法:

在不大于自身数值类型最大位数的移位时,一个数移位n,就是将这个数乘以(左移)2的n次幂,右移就是除,然后都取整就可以了

比如int 32位的

500>>3 这样算:500/8 取整 就是62

356>>4 356/16 结果是 22

8<<3 8*8 结果是 64

64位和上面方法一样。

如果移动过大超过了32位怎么办 移位数和32取余得到的数字在套用上面就可以了

比如 500>>67 怎么算?(就相当于500>>3)

1.先67对32取余 结果是3

2. 然后500/8 结果62

  • 补充一点:计算机指令种的右移位运算符有2种,左移就是补0没花哨。但右移就有点事情了。

1. 算术右移 意思是你移动后补的是最高位的值。

举例:一个byte数字99 的二进制是 0110 0011

你右移4位后 补的是0 ------0000 0110

但是再看这一个:byte数字-107二进制是1001 0101 这是1开头的

你右移4位后补的确是最高位1 -------1111 1001

2.逻辑右移 补0就完事了

针对右移,C语言美显示给出用哪种的,一般根据编译器/机器组合来确定用哪一种,但大多数都默认算术右移。

JAVA就比较严谨了,明确规定x>>k是算术右移

x>>>k是逻辑右移

话说回来之所以区分这一点我想应该是对有符号的规定吧,无符号右移肯定是逻辑的啊 最高位本来就是0,然而对于负数最高位是1,在进行右移时算术右移的提出解决了一个很普遍的问题,那就是负整数的除法运算,你负数除以一个正数一定是负数吧,如果没有算数右移这一概念的提出不补1都补0的话你得到的就是正数了,算术右移可以替代除法运算。有了这个就完美了,得到的还是负数,符合现实中数学常识了

相关阅读

java中的notify和notifyAll有什么区别?

作者:知乎用户链接:https://www.zhihu.com/question/37601861/answer/145545371来源:知乎著作权归作者所有。商业转载请联系作者获得

Java用OutputStream向接收者写入内容

OutputStream是java中的抽象类,它是所有表示字节输出流的所有类的超类,输出流介绍字节并将它发送到某个接收器。抽象类OutputStream

Java转义字符

Java转义字符 使用场景 //1.路径转义windows路径: D:\ProgramFilesLinux路径: /home/myFilesJava代码中路径符号与Linux一致,而

Java面试笔试题大汇总(最全+详细答案)

声明:有人说, 有些面试题很变态,个人认为其实是因为我们基础不扎实或者没有深入。本篇文章来自一位很资深的前辈对于最近java面试题

java中关于try、catch、finally中的细节分析,值得一看,

本文是一个老前辈写的java中的try、catch、finally的用法文章,下面的9个例子,把涵盖的所有用法基本都涵盖了,值得大家细细的观看,很有

分享到:

栏目导航

推荐阅读

热门阅读