Java_位运算符_左移右移

左移和右移都是对整数的补码进行运算的

左移就是补码向左移两位,每左移一位就相当于补码所对应的十进制的整数  *2

右移就是补码向右移两位,每右移一位就相当于补码所对应的十进制的整数  \2


61补码:00..0 11 1101    (Java的整型默认类型为Int,int占32bit)

左移:00..0 0011 1101 << 00..0 0111 1010 << 00..0 1111 0100 (244)

右移:00..0 0011 1101 >> 00..0 0001 1110 >> 00..0 0000 1111 (15)

System.out.println((byte)(61<<2));	//-12
System.out.println(61<<2);//244
System.out.println(0b0011111111111111111111111111111111111111111111111111111111111111l<<2);	//-4
System.out.println(-61>>>2);	//1073741808
System.out.println(61>>>2);	//15

1、3句都是溢出了,不能保持原来的正负

>>>是无符号右移,无符号右移右移后前面会补0,负数无符号右移后都会变为正数,正数的无符号右移和普通右移一样

只有无符号右移>>> 

为什么没有无符号左移? 

无符号左移没意义,因为无符号左移和带符号的左移一样都是左移后往后面补0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值