`
liuwei1981
  • 浏览: 756768 次
  • 性别: Icon_minigender_1
  • 来自: 太原
博客专栏
F8258633-f7e0-30b8-bd3a-a0836a5f4de5
Java编程Step-by...
浏览量:157223
社区版块
存档分类
最新评论

43.移位运算符

 
阅读更多

移位运算符和位运算符使用频度差不多,基本上很少用到。这里也是简单提一下。

 

在n久之前,很多Java面试题会有这样类型的题目:以最有效率的算法完成乘法或者除法,这里就需要用到移位运算符,不过这里除数都是2的倍数。

 

一个字节由八个位(bit)组成,每个位(bit)可以为1或者0,整个数的值通过使用以2为基数的算法来决定。也就是说,最右边的为代表值1或者0;下一个位表示2或者0;再下一个表示4或者0… …,第n位表示2(n-1)或者0。


在Java中,除了Char类型外的其他整型数据,所有的整型数据类型的最左边都作为符号位。如果符号位是1,这个数就是负数,并使用补码来表示,即通过将各个位的值取反然后再加1来表示一个负数。例如:
 1=0… …001
 -1=1… …1111
 2=0… … 0010
 -2=1… …1110


移位运算将左操作数向左或向右移动右操作数给定的位数。


我们来看下面的例子:
 18<<2


因为整数的值被解释int类型,所以18被当作32位的数。因为18的高24位全部为0,所以,为简化起见,只考虑低8位:
 00010010


在<<操作过程中,它在低位插入右操作数指定的个数的0,同时扔掉相同位数的高位,因此,经过左移操作后的二进制表示为:
 01001000


它的十进制的值为2(7-1)+2(4-1) =72。


>>运算符将左操作数向右移动右操作数给定的位数,而扔掉相同位数的低位。向右移动后高位“腾出”的空间用全1或全0来填充。用0或1取决于原来这个左操作数最高位的值,如果最高位是1,则用全1来填充,否则,则用0来填充。这样,原来数据中的符号就不会丢失了。

 

例如,原来的数为负数,其最高位为1,通过>>操作后,最高位还是1,它还是负数。因此,>>被称为“有符号右移运算符”。

 

>>>运算符允许我们将有符号数当作无符号数来进行(向右)移位操作。当一个数被>>>向右移位时,低位数被丢弃,而在“腾出来”的高位填充上0。这样,无论这个数原来是否有符号,经过>>>移位后,都变成了正数。

注意:
没有与>>>对应的<<<操作。因为左移补位一定是0,没有疑义。


移位运算符<<、>>和>>>用于对整型数据进行按位移位操作,适用的数据类型有:byte、short、char、int、long,其中对于低于int型的操作数,将自动转换为int型,然后进行移位操作,最终得到的结果为int型。
“a<<b;”将二进制形式的a逐位左移b位,最低空出的b位补0;
“a>>b;”将二进制形式的a逐位右移b位,最高位空出的b位补原来的符号位;
“a>>>b;”将二进制形式的a逐位右移b位,最高位空出的b位补0。

 

对于int型以及低于int型的整数a进行移位(b位)时,系统先将b对32取模,得到的结果才是真正移位的位数,例如“127>>32”的结果是127(实际右移32%32=0位)。对于long型整数移位时,则是先将移位位数b对64取模,得到的结果才是实际移位的位数。

分享到:
评论

相关推荐

    java 移位运算符的资源

    java 移位运算符 java 移位运算符 java 移位运算符

    GUI巧用移位运算符获取汉字编码值(C#).rar

    一个使用C#实现的小案例,通过使用移位运算符来获取汉字的GB2312编码值(附blog原文:https://blog.csdn.net/qq_38768365/article/details/99410757)

    Java中的进制与移位运算符

    Java中的进制与移位运算符 Java中的进制与移位运算符

    C语言中位移位运算符[借鉴].pdf

    C语言中位移位运算符[借鉴].pdf

    移位运算符

    移位运算符

    Java移位运算符1

    java中有三种移位运算符 : 左移运算符,num ,相当于num乘以2&gt;&gt; : 右移运算符,num &gt;&gt; 1,

    【IT十八掌徐培成】Java基础第02天-04.运算符-移位运算-逻辑运算.zip

    【IT十八掌徐培成】Java基础第02天-04.运算符-移位运算-逻辑运算.zip

    深入理解C++移位运算符

    下面小编就为大家带来一篇深入理解C++移位运算符。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Java三种移位运算符原理解析

    主要介绍了Java三种移位运算符原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

    主要介绍了Java移位运算符详解实例(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    2023最新整理版-java基础面试提

    2023最新整理,java...12. 移位运算符 12 13. continue、break 和 return 的区别是什么? 13 14. 成员变量与局部变量的区别? 15 13. 静态变量有什么作用? 15 14. 字符型常量和字符串常量的区别? 15 15. 什么是方法

    Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)

    Erlang的比较运算符 opDescription==等于/=不等于=&lt;小于等于&lt;小于&gt;=大于等于&gt;大于=:=精确的等于=/=精确的不等于等于和精确等于的区别: 如果要比较两个数,如果两个数之间是不同的类型,比如float和int那么,=...

    java中的移位运算符心得总结

    介绍了java中的移位运算符,有需要的朋友可以参考一下

    java中关于移位运算符的demo与总结(推荐)

    下面小编就为大家带来一篇java中关于移位运算符的demo与总结(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    C++位运算符详解(异或运算符和移位运算符)

    下面小编就为大家带来一篇C++位运算符详解(异或运算符和移位运算符)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    实验三实习报告1

    2.运算符包括:算术运算符,赋值运算符,关系运算符,逻辑运算符,移位运算符,其他特殊运算符(is运算符,new运算符,Typeof运算符),3.运算符之间的优先

    C#教程(语言规范)

    7.9 移位运算符 ... 170 7.10 关系和类型测试运算符 ... 171 7.10.1 整数比较运算符... 172 7.10.2 浮点比较运算符... 173 7.10.3 小数比较运算符... 173 7.10.4 布尔相等运算符... 173 7.10.5 枚举比较运算符...

    c#3.0语言规范高清PDF

    1.6.7.5 运算符 .......................................................................................................................................... 23 1.6.7.6 析构函数 .............................

    Java运算符介绍.pptx.pptx

    Java运算符分类 Java运算符主要分为四类:算术运算符、关系运算符、逻辑运算符和位运算符,这些运算符...位运算符主要用于处理二进制数据,包括与、或、非、异或和移位等操作,它们可以实现对数据的快速处理和转换。

Global site tag (gtag.js) - Google Analytics