Java中的移位运算符(“<<”、“>>”、“>>>”)

xiaoxiao2021-02-28  105

移位运算符也针对二进制的“位”,它主要包括:左移位运算符(<<)、右移位运算符(>>>)、带符号的右移位运算符(>>)。

1.左移运算符 左移运算符用“<<”表示,是将运算符左边的对象,向左移动运算符右边指定的位数,并且在低位补零。其实,向左移n 位,就相当于乘上2 的n 次方,如下所示:

public static void main(String[] args) { int a = 2; int b = 2; System.out.println("a移位前结果为:"+ a + " ,转换为2进制:" + Integer.toBinaryString(a)); System.out.println("a<<b 移位后结果为:"+ (a<<b) + " ,转换为2进制:" + Integer.toBinaryString(a<<b)); }

运行结果:

a移位前结果为:2 ,转换为2进制:10 a<<b 移位后结果为:8 ,转换为2进制:1000

2.右移运算符 右移运算符用符号“>>>”表示,是将运算符左边的对象向右移动运算符右边指定的位数,并且在高位补0,其实右移n 位,就相当于除上2 的n 次方。 代码如下:

public static void main(String[] args) { int a = 16; int b = 2; int c = -16; System.out.println("a结果为:"+ a + " ,转换为2进制:" + Integer.toBinaryString(a)); System.out.println("a>>>b结果为:"+(a>>>b)+" ,转换为2进制:" + Integer.toBinaryString(a>>>b)); System.out.println("c 结果为 :"+ c + " ,转换为2进制:" + Integer.toBinaryString(c)); System.out.println("c>>>b结果为:"+(c>>>b)+" ,转换为2进制:" + Integer.toBinaryString(c>>>b)); }

运行结果:

a结果为:16 ,转换为2进制:10000 a>>>b结果为:4 ,转换为2进制:100 c 结果为 :-16 ,转换为2进制:11111111111111111111111111110000 c>>>b结果为:1073741820 ,转换为2进制:111111111111111111111111111100

负数 c 右移位后,高位补0变为正数。

3.带符号的右移运算符 带符号的右移运算符用符号“>>”表示,是将运算符左边的运算对象,向右移动运算符右边指定的位数。如果是正数,在高位补零,如果是负数,则在高位补1,如下:

public static void main(String[] args) { int a = 16; int b = 2; int c = -16; System.out.println("a结果为:"+ a + " ,转换为2进制:" + Integer.toBinaryString(a)); System.out.println("a>>b结果为:"+(a>>b)+" ,转换为2进制:" + Integer.toBinaryString(a>>b)); System.out.println("c 结果为 :"+ c + " ,转换为2进制:" + Integer.toBinaryString(c)); System.out.println("c>>b结果为:"+(c>>b)+" ,转换为2进制:" + Integer.toBinaryString(c>>b)); }

运行结果:

a结果为:16 ,转换为2进制:10000 a>>b结果为:4 ,转换为2进制:100 c 结果为 :-16 ,转换为2进制:11111111111111111111111111110000 c>>b结果为:-4 ,转换为2进制:11111111111111111111111111111100
转载请注明原文地址: https://www.6miu.com/read-29161.html

最新回复(0)