在java中有>>,<<和>>>运算符。
根据Java doc
签名的左移运营商"<<&#;将位模式向左移动, 和签名的右移操作员">>"将位模式转换为 对。位模式由左侧操作数和 由右手操作数移动的仓位数。未签名的 右移运算符">>>"将零移动到最左边的位置, 而在">>"之后的最左边的位置取决于符号扩展。
我是二进制数据的新手,我发现这个解释有点模棱两可,没有例子或用例。 有人可以给我这些运营商的例子或用例吗?
谢谢,
答案 0 :(得分:4)
签名的左移运营商"<<&#;将位模式向左移动,并使用带符号的右移运算符">>"将位模式向右移动。位模式由左侧操作数给出,位置数由右侧操作数移位。无符号右移运算符">>>"将零移动到最左边的位置,而在">>"之后的最左边的位置取决于符号扩展。
答案 1 :(得分:2)
public class Test {
public static void main(String args[]) {
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a << 2; /* 240 = 1111 0000 */
System.out.println("a << 2 = " + c );
//this will shift the binary version of a to two bits left side and insert zero in remaining places
c = a >> 2; /* 215 = 1111 */
System.out.println("a >> 2 = " + c );
//this will shift the binary version of a to left by two bits right insert zero in remaining places
c = a >>> 2; /* 215 = 0000 1111 */
System.out.println("a >>> 2 = " + c );
//this will shift the binary of a to 3bits right insert zero in remaining places
}
}
答案 2 :(得分:1)
我们有十进制和二进制的以下数字:
8 = 0000 1000
15 = 0000 1111
10 = 0000 1010
然后我们使用&lt;&lt;运营商,我们有以下结果:
8&lt;&lt; 1 - &gt; 0001 0000 = 16
15&lt;&lt; 2 - &gt; 0011 1100 = 60
10&lt;&lt; 1 - &gt; 0001 0100 = 20
如您所见,运算符将数字的二进制表示移动右数操作数给出的位数。这样做,您获得一个新号码。