java移位操作_java 移位运算

移位运算 :将整数转化为二进制(以补码的形式),按位平移。

<<     左移

>>     右移

>>>   无符号右移

<

按位做平移,末位用0补上(正负数都一样)

a << n;

如果 a 是  byte、short、int 类型 那么 a << n 就是  a << (n%32)

int a = 5;

System.out.println(a<<3);     //输出 40

System.out.println(a<<35);   //输出 40

如果 a 是  long 类型  那么 a << n 就是  a << (n%64)

long a = 5;

System.out.println(a<<3);     //输出 40

System.out.println(a<<35);   //输出 171798691840

System.out.println(a<<67);  //输出 40

注意 :由于这只是按位平移,有可能符号化会改变

int a = 1;

a<<=31;

System.out.println(a);    //输出 -2147483648

System.out.println(Integer.toBinaryString(a));    //输出1000 0000 0000 0000 0000 0000 0000 0000

由于最高位是1所以是一个负数

>> 右移:

按位做平移

如果 a 是  byte、short、int 类型 那么 a >> n 就是  a >> (n%32)

int a = 40;

System.out.println(a>>3);     //输出 5

System.out.println(a>>35);   //输出 5

如果 a 是  long 类型  那么 a >>n 就是  a >> (n%64)

long a = 40;

System.out.println(a>>3);     //输出 5

System.out.println(a>>35);   //输出 0

System.out.println(a>>67);  //输出 5

注意 :正数右移,前补位0(正数往右移,最小为0)

System.out.println(40>>31);   //输出 0

System.out.println(Integer.toBinaryString(40>>31));  //输出 0

负数右移,前补位1(负数往右移,最大为-1)

System.out.println(-40>>31);   //输出 -1

System.out.println(Integer.toBinaryString(-40>>31));  //输出1111 1111 1111 1111 1111 1111 1111 1111

负数右移,并不仅仅是除以2

System.out.println(-5>>1);     //输出 -3

System.out.println(Integer.toBinaryString(-5));    //输出 1111 1111 1111 1111 1111 1111 1111 1011

System.out.println(Integer.toBinaryString(-5>>1));  //输出 1111 1111 1111 1111 1111 1111 1111 1101

>>>无符号右移:

按位做平移,前补位用0(正负数都一样)

如果 a 是  byte、short、int 类型 那么 a >>> n 就是  a >>> (n%32)

int a = 40;

System.out.println(a>>>3);     //输出 5

System.out.println(a>>>35);   //输出 5

如果 a 是  long 类型  那么 a >>> n 就是  a >>> (n%64)

long a = 40;

System.out.println(a>>>3);     //输出 5

System.out.println(a>>>35);   //输出 0

System.out.println(a>>>67);  //输出 5

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值