Java中移位运算是一种十分基础和常见的运算,尤其常被用于对整形变量进行操作。在Java中,移位运算分为左移、右移和无符号右移三种。在进行移位运算时,需要对移动的位数进行限定,其中负数向左移动时会变成正数,向右移动时会变成负数。
在Java中,除了二进制移位运算符外,还有其他的运算符,比如算数运算符、直接寻址运算符、成员访问运算符等等。这些运算符之间并不存在优先级的差别,需要根据运算符的使用方式进行运算。其中,移位运算的优先级比算数运算低,与逻辑运算、关系运算并列。
Java中的移位运算是针对整型变量的,其操作数必须是int类型的,而操作位数必须为正整数和非负数,不能为负数。在进行Java移位运算时,需要先将数值转换为二进制数,再将数值移到指定的位数上,然后再将结果转换为10进制数。
Java中的移位运算有以下三种:
1.左移运算符(<<)
左移运算符是将一个数的二进制码表示向左移动指定的位数,移动后右端新空出的位用0填充。比如3<<2,将3的二进制码0011向左移动2位,得到1100即12,其等同于3*2的2次方。移位的位数不能超过32位。
2.右移运算符(>>)
右移运算符是将一个数的二进制码表示向右移动指定的位数,移动后左端新空出的位用原来的符号位填充,即,如果原有符号是正数,则填充0,如果原有符号是负数,则填充1。比如-3>>2,将-3的二进制码11111111111111111111111111111101向右移动2位,得到11111111111111111111111111111111,即-1。同样,移位的位数不能超过32位。
3.无符号右移运算符(>>>)
无符号右移运算符也是将一个数的二进制码表示向右移动指定的位数,不同的是,无符号右移运算符不考虑符号位。对于正数,与右移运算符(>>)效果一致,而对于负数,则会将所有位填充0,并得到正数。比如-3>>>2,将-3的二进制码11111111111111111111111111111101向右移动2位,得到00111111111111111111111111111111,即1073741823。与其他移位运算符一样,移位的位数不能超过32位。
以上就是Java中移位运算的使用和原理,可以看到移位运算虽然十分基础和常见,但在实际的开发中,还是需要对其进行更深入的理解和掌握。