移位运算符

移位运算符操作的对象就是二进制的位,可以单独用移位运算符来处理int型整数。当操作的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。移位操作符能操作的数只有int类型和long类型。


<< 左移运算符
左移运算符<< 使指定值的所有位都左移规定的次数
规则:丢弃最高位,0补最低位
如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取余(取模)
如对int型移动33位,实际上只移动了33%32=1位

//  3 << 2 (3为int型)
0000 0000 0000 0000 0000 0000 0000 0011    //二进制 
0000 0000 0000 0000 0000 0000 0000 1100    //左移两位
//转换为十进制是12

在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方
n<<m 结果为 n*2m


>> 带符号右移
有符号右移运算符<< 将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1.

规则:符号位不变,左边补上符号位,即最高位是0,左边补齐0;最高为是1,左边补齐1

11 >> 2 (11int)
0000 0000 0000 0000 0000 0000 0000 1011  //右移2位,左边补0
0000 0000 0000 0000 0000 0000 0000 0010
// 转换为十进制是2

右移一位相当于除2,右移n位相当于除以2的n次方,向下取整。正负数通用
n>>m 结果为 n/2m


>>>无符号右移
无符号右移运算>>> 将运算符左边的对象向右移动运算符右边指定的位数。采用0扩展机制,也就是说,无论值的正负,都在高位补0.
规则:忽略了符号位扩展,0补最高位

无符号右移规则和右移运算是一样的,只是填充时不管左边的数字是正是负都用0来填充,无符号右移运算只针对负数计算,因为对于正数来说这种运算没有意义

无符号右移运算符>>> 只是对32位和64位的值有意义


java位移运算符详解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值