前言:java移位运算符详解
移位运算符分类:左移运算符<< 右移运算符>> 无符号位右移>>>
一、左移运算符<<
①、书写格式
value<<num
即将value数值转换为二进制后,向左移动num位。高位移除舍去、低位补零。
在移动过程中,short、byte、char类型移位后会变成int型。在int、short、byte、char、
移位过程中实际上移动的是:实际移位数=移位数%32.例如,当一个int型移动33位与移动
一位结果是一样的。
②、运算规则
·先把运算数按二进制形式表示,并向左移动num位,高num位移除舍弃,低num位补零。
·当short、char、byte移位时,自动转换位int位参与运算。
①、书写格式
value<<num
即将value数值转换为二进制后,向左移动num位。高位移除舍去、低位补零。
在移动过程中,short、byte、char类型移位后会变成int型。在int、short、byte、char、
移位过程中实际上移动的是:实际移位数=移位数%32.例如,当一个int型移动33位与移动
一位结果是一样的。
②、运算规则
·先把运算数按二进制形式表示,并向左移动num位,高num位移除舍弃,低num位补零。
·当short、char、byte移位时,自动转换位int位参与运算。
③、数学意义
·在没有溢出的情况下,对于负数和正数左移运算,就相当于乘法运算。左移n位就相当于乘以2的n次方。
④、计算方式
例如:3 <<2(3为int型)
·把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,
·把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位
·在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,
·转换为十进制是12。
二、右移运算符>>
①、书写格式
value>>num
即将value转换成二进制位,向右移动num位,低位移出舍去,若为正数高位补零,若为负数,高位补1.
②、运算规则
·按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数 补1
·当右移的运算数是byte 和short、char类型时,将自动把这些类型扩大为 int 型。
③、数学意义
·右移一位相当于除2,右移n位相当于除以2的n次方。
④、计算方法
·11 >>2(11为int型)
·11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011
·把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。
·最终结果是0000 0000 0000 0000 0000 0000 0000 0010。
·转换为十进制是3。
三、无符号位右移>>>
value >>> num
num 指定要移位值value 移动的位数。
无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位
四、移位运算符的意义
二进制运算符,包括位运算符和移位运算符,使程序员可以在二进制基础上操作数字,可以更有效的进行运算,
并且可以以二进制的形式存储和转换数据,是实现网络协议解析以及加密等算法的基础。