5分钟搞懂Java中的>>,>>>,<<

本文主要介绍了Java中>>、>>>与<<运算符。>>是右移,正数高位补0,负数高位补1;>>>右移高位补0;<<左移低位补0。还对这些结论进行了代码验证,回顾了原码、反码、补码知识,以及Java中二进制、八进制、十六进制的赋值方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

>>,>>>与<<

先上结论:

>> :右移,正数右移,高位补0,负数右移,高位补1
>>>:右移,高位补0,不区分正数负数
<<:左移,低位补0,不区分正数负数
注:1.左移右移符号位也一起移动
       2.高位低位补1/0是指:移动完后空出来的位全部补1/0
       3.不存在<<<这个运算符

对于正数来说,>>与>>>是一样的,均为右移高位补0
对于负数来说,>>与>>>是不一样的,>>右移高位补1,>>>右移高位补0

要实现左移乘右移除的话,用>>与<<即可
负数用>>>会变成正数,不知道这个>>>有啥用。。。

接下来是以上结论的代码验证。


>>,>>>,<<代码验证

测试代码:

@Test
public void test() {
	int a = 0b10011111111111111111111111111111;//不用数了,这里是32位
	int b = a>>2;
	int c = a>>>2;
	int d = a<<2;
	System.out.println("a的值为:"+a);
	System.out.println("a的二进制表示:" + Integer.toBinaryString(a));
	System.out.println("a>>2的值为:"+b);
	System.out.println("a>>2的二进制表示:" + Integer.toBinaryString(b));
	System.out.println("a>>>2的值为:"+c);
	System.out.println("a>>>2的二进制表示:" + Integer.toBinaryString(c));
	System.out.println("a<<2的值为:"+d);
	System.out.println("a<<2的二进制表示:" + Integer.toBinaryString(d));
}

输出为:

	a的值为:-1610612737
	a的二进制表示:10011111111111111111111111111111(32位)
	a>>2的值为:-402653185
	a>>2的二进制表示:11100111111111111111111111111111(32位)
	a>>>2的值为:671088639
	a>>>2的二进制表示:100111111111111111111111111111(30位)
	a<<2的值为:2147483644
	a<<2的二进制表示:1111111111111111111111111111100(31位)

int是32位,但是显示的时候是从第一个1开始显示的
所以a>>>2只显示30位,a<<2只显示31位

测试代码:

@Test
public void test() {
	int a = -16;
	int b = a>>2;
	int c = a>>>2;
	int d = a<<2;
	System.out.println("a的值为:"+a);
	System.out.println("a>>2的值为:"+b);
	System.out.println("a>>>2的值为:"+c);
	System.out.println("a<<2的值为:"+d);
}

输出为:

	a的值为:-16
	a>>2的值为:-4
	a>>>2的值为:1073741820
	a<<2的值为:-64

原码,反码,补码回顾:
  • 正数:原码=反码=补码
  • 负数:原码;反码=原码除符号位外取反;补码=反码+1=原码除符号位外取反+1

注:补码的补码=原码,即符号位不变,其余位取反+1

例:-20
原码:1001 0100
反码:1110 1011
补码:1110 1100
补码的补码:1001 0011+1 =1001 0100


Java中赋值回顾:

Java中除了十进制赋值外,还有二进制赋值,八进制赋值,十六进制赋值

测试代码:

@Test	
public void test() {
	int a = 10;//十进制赋值
	int b = 0b1010;//二进制赋值
	int c = 012;//八进制赋值
	int d = 0xa;//十六进制赋值
	System.out.println("a = " + a);
	System.out.println("b = " + b);
	System.out.println("c = " + c);
	System.out.println("d = " + d);
}

输出为:

	a = 10
	b = 10
	c = 10
	d = 10

总结:
         二进制赋值:前面加0b
         八进制赋值:前面加0
         十六进制赋值:前面加0x


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值