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

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 移位运算符是编程语言中用于处理二进制位的一种高效操作方式,它们能够对整数类型(byte, short, int, long)的值进行左移、右移和无符号右移操作。理解这些运算符对于优化代码和深入理解计算机底层工作原理至...

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

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

    JAVA运算符.pdf

    移位运算符可以用于高效的乘除法计算,如`x 相当于`x * 2^n`,`x &gt;&gt; n`相当于`x / 2^n`。 类型转换可以是自动的(如较小类型转换为较大类型),也可以是强制的(通过显式类型转换实现)。自动转换发生在赋值时不会...

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

    "C语言中位移位运算符" C语言中位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算。位移位运算符分为左移和右移两种,均为双目运算符。第一运算对象是移位对象,第二个运算对象是所移的二进制...

    java运算符优先级.doc

    5. 移位运算符:、&gt;&gt;、&gt;&gt;&gt; 6. 比较运算符:==、!=、&lt;、&gt;、、&gt;= 7. 逻辑运算符:&&、|| 8. 赋值运算符:=、+=、-=、\*=、/=、%=、、&gt;&gt;=、&=、^=、|=、&gt;&gt; 二、Java 异常处理 Java 中的异常处理机制可以帮助开发者...

    C语言运算符优先级

    移位运算符`(左移)和`&gt;&gt;`(右移)用于处理二进制位的移动,它们在C语言中也有较高的优先级。 ### 6. 关系运算符 关系运算符包括大于`&gt;`、大于等于`&gt;=`、小于`和小于等于`,用于比较两个表达式的大小。 ### 7. ...

    Java移位运算符1

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

    java运算符优先级[整理].pdf

    7. 左移位、右移位运算符 左移位()、右移位(&gt;&gt;)运算符的优先级相同,且从左到右。 8.关系运算符 关系运算符包括小于(&lt;)、大于(&gt;)、小于或等于()、大于或等于(&gt;=)等。它们的优先级相同,且从左到右。 ...

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

    移位运算符主要包括左移位运算符()、右移位运算符(&gt;&gt;&gt;)和带符号的右移位运算符(&gt;&gt;)。这些运算符可以单独用来处理int型整数。 1. 左移位运算符() 左移位运算符用“”表示,是将运算符左边的对象向左移动...

    JAVA 运算符的基本了解与使用

    Java 中还提供了一些移位运算符,例如左移 ()、右移 (&gt;&gt;) 和无符号右移 (&gt;&gt;&gt;) 等。 7. 三元运算符 三元运算符是一种特殊的运算符,用于根据条件表达式的结果来选择不同的值。其格式为:变量名 = 条件表达式 ? 值1 ...

    C++运算符与结合性

    按位左移运算符()和按位右移运算符(&gt;&gt;)是C++语言中的一种二元运算符,用于执行按位移位运算。这些运算符的结合方向是从左到右。 18. 关系运算符(、&gt;=、==、!=): 关系运算符(、&gt;=、==、!=)是C++语言中的一...

    Java中的进制与移位运算符

    在Java编程语言中,进制表示法和移位运算符是两种重要的概念,它们在处理二进制数据和高效计算中发挥着关键作用。本文将深入探讨这两种概念,并结合实例来帮助理解。 首先,让我们来看Java中的进制表示法。在计算机...

    C语言运算符使用的优先级

    4. 移位运算符(,&gt;&gt;):它们在算术运算符之后。 5. 关系运算符(&lt;,,&gt;,&gt;=):其中 `, `, `&gt;`, `&gt;=` 的优先级高于相等和不等运算符(==, !=)。 6. 相等运算符(==, !=):紧接着关系运算符。 7. 逻辑按位运算符(&, ^...

    c语言操作符的优先级排列及其说明[归类].pdf

    5. 移位运算符(左结合):&lt;&lt; &gt;&gt; 6. 关系运算符(左结合):&lt; &lt;= &gt; &gt;= 7. 等价运算符(左结合):== != 8. 位与运算符(左结合):& 9. 位异或运算符(左结合):^ 10. 位或运算符(左结合):| 11. 逻辑与运算符...

    C语言优先级C语言优先级.doc

    2. 双目运算符:包括算术运算符、移位运算符、关系运算符、逻辑运算符等。 3. 三目运算符:包括条件运算符。 4. 赋值运算符:包括赋值、加法赋值、减法赋值等。 5. 逗号运算符:用于分割语句。 C语言运算符优先级...

    C语言运算符和表达式.ppt

    例如,&用于按位与,|用于按位或,^用于按位异或,~用于按位取反,和&gt;&gt;分别用于左移和右移位。 9. 数据类型转换运算符如`(类型)`用于将一个类型的值转换为另一个类型。例如,`(int)3.14`会将浮点数3.14转换为整数3...

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

    Java三种移位运算符原理解析 Java移位运算符是Java编程语言中的一种基本操作符,主要用于对二进制数的移位操作。Java中有三种移位运算符:左移运算符()、带符号右移运算符(&gt;&gt;)和无符号右移运算符(&gt;&gt;&gt;)。下面...

    3.2.2 java中的关系与条件运算符.docx

    移位运算符包括: 1. 无符号右移运算符 (&gt;&gt;&gt;): 将操作数的二进制表示向右移动指定位数,右侧用0填充。对于正数,其效果相当于除以2的幂次,但负数处理方式不同,因为移位后可能会导致正负号改变。 2. 有符号右移运...

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

    C++的移位运算符是编程中非常重要的概念,它包括左移运算符()和右移运算符(&gt;&gt;)。这些运算符允许我们将整数的位向左或向右移动指定的次数,从而实现快速的乘除运算和其他位级别的操作。 左移运算符()将数字的...

    C语言中的逻辑运算符

    5. 移位运算符,包括左移()和右移(&gt;&gt;)。 6. 关系运算符,用于比较运算,包括小于(&lt;)、小于等于()、大于(&gt;)、大于等于(&gt;=)、等于(==)、不等于(!=)。 7. 按位与(&)、按位异或(^)、按位或(|)运算符,它们用于位运算。 8...

Global site tag (gtag.js) - Google Analytics