移位运算符和位运算符使用频度差不多,基本上很少用到。这里也是简单提一下。
在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 移位运算符是编程语言中用于处理二进制位的一种高效操作方式,它们能够对整数类型(byte, short, int, long)的值进行左移、右移和无符号右移操作。理解这些运算符对于优化代码和深入理解计算机底层工作原理至...
一个使用C#实现的小案例,通过使用移位运算符来获取汉字的GB2312编码值(附blog原文:https://blog.csdn.net/qq_38768365/article/details/99410757)
移位运算符可以用于高效的乘除法计算,如`x 相当于`x * 2^n`,`x >> n`相当于`x / 2^n`。 类型转换可以是自动的(如较小类型转换为较大类型),也可以是强制的(通过显式类型转换实现)。自动转换发生在赋值时不会...
"C语言中位移位运算符" C语言中位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算。位移位运算符分为左移和右移两种,均为双目运算符。第一运算对象是移位对象,第二个运算对象是所移的二进制...
5. 移位运算符:、>>、>>> 6. 比较运算符:==、!=、<、>、、>= 7. 逻辑运算符:&&、|| 8. 赋值运算符:=、+=、-=、\*=、/=、%=、、>>=、&=、^=、|=、>> 二、Java 异常处理 Java 中的异常处理机制可以帮助开发者...
移位运算符`(左移)和`>>`(右移)用于处理二进制位的移动,它们在C语言中也有较高的优先级。 ### 6. 关系运算符 关系运算符包括大于`>`、大于等于`>=`、小于`和小于等于`,用于比较两个表达式的大小。 ### 7. ...
在Java编程语言中,移位运算符是一种高效的方式来进行位操作,它们对于处理二进制数据和进行快速的乘法、除法等计算非常有用。本文将深入探讨Java中的三种移位运算符:左移运算符(),右移运算符(>>)以及无符号右...
7. 左移位、右移位运算符 左移位()、右移位(>>)运算符的优先级相同,且从左到右。 8.关系运算符 关系运算符包括小于(<)、大于(>)、小于或等于()、大于或等于(>=)等。它们的优先级相同,且从左到右。 ...
移位运算符主要包括左移位运算符()、右移位运算符(>>>)和带符号的右移位运算符(>>)。这些运算符可以单独用来处理int型整数。 1. 左移位运算符() 左移位运算符用“”表示,是将运算符左边的对象向左移动...
Java 中还提供了一些移位运算符,例如左移 ()、右移 (>>) 和无符号右移 (>>>) 等。 7. 三元运算符 三元运算符是一种特殊的运算符,用于根据条件表达式的结果来选择不同的值。其格式为:变量名 = 条件表达式 ? 值1 ...
按位左移运算符()和按位右移运算符(>>)是C++语言中的一种二元运算符,用于执行按位移位运算。这些运算符的结合方向是从左到右。 18. 关系运算符(、>=、==、!=): 关系运算符(、>=、==、!=)是C++语言中的一...
在Java编程语言中,进制表示法和移位运算符是两种重要的概念,它们在处理二进制数据和高效计算中发挥着关键作用。本文将深入探讨这两种概念,并结合实例来帮助理解。 首先,让我们来看Java中的进制表示法。在计算机...
4. 移位运算符(,>>):它们在算术运算符之后。 5. 关系运算符(<,,>,>=):其中 `, `, `>`, `>=` 的优先级高于相等和不等运算符(==, !=)。 6. 相等运算符(==, !=):紧接着关系运算符。 7. 逻辑按位运算符(&, ^...
5. 移位运算符(左结合):<< >> 6. 关系运算符(左结合):< <= > >= 7. 等价运算符(左结合):== != 8. 位与运算符(左结合):& 9. 位异或运算符(左结合):^ 10. 位或运算符(左结合):| 11. 逻辑与运算符...
2. 双目运算符:包括算术运算符、移位运算符、关系运算符、逻辑运算符等。 3. 三目运算符:包括条件运算符。 4. 赋值运算符:包括赋值、加法赋值、减法赋值等。 5. 逗号运算符:用于分割语句。 C语言运算符优先级...
例如,&用于按位与,|用于按位或,^用于按位异或,~用于按位取反,和>>分别用于左移和右移位。 9. 数据类型转换运算符如`(类型)`用于将一个类型的值转换为另一个类型。例如,`(int)3.14`会将浮点数3.14转换为整数3...
Java三种移位运算符原理解析 Java移位运算符是Java编程语言中的一种基本操作符,主要用于对二进制数的移位操作。Java中有三种移位运算符:左移运算符()、带符号右移运算符(>>)和无符号右移运算符(>>>)。下面...
移位运算符包括: 1. 无符号右移运算符 (>>>): 将操作数的二进制表示向右移动指定位数,右侧用0填充。对于正数,其效果相当于除以2的幂次,但负数处理方式不同,因为移位后可能会导致正负号改变。 2. 有符号右移运...
C++的移位运算符是编程中非常重要的概念,它包括左移运算符()和右移运算符(>>)。这些运算符允许我们将整数的位向左或向右移动指定的次数,从而实现快速的乘除运算和其他位级别的操作。 左移运算符()将数字的...
5. 移位运算符,包括左移()和右移(>>)。 6. 关系运算符,用于比较运算,包括小于(<)、小于等于()、大于(>)、大于等于(>=)、等于(==)、不等于(!=)。 7. 按位与(&)、按位异或(^)、按位或(|)运算符,它们用于位运算。 8...