只有三种Ja移位操作符:& gt(带符号右移)和>;& gt& gt(无符号右移)。
1、左移运算符
左移运算符
1)其一般格式如下:
价值& lt& lt数字
Num指定移动值的位数。
左移的规则是只记住一点:舍弃最高位,0补足最低位。
如果移动的位数超过这种类型的最大位数,编译器将对移动的位数取模。如果对int类型移动33位,实际上只移动了33%32=1位。
2)操作规则
在二进制形式中,所有数字都左移相应位数,高位移出(丢弃),低位空用零填充。
当左移的操作数为int类型时,每移动1位,其第31位将被移出并丢弃;
当左移的操作数是long类型时,每当它移动1位时,它的第63位将被移出并丢弃。
当左移的操作数是byte和short类型时,这些类型会自动扩展为int类型。
3)数学意义
在数字不溢出的前提下,无论是正数还是负数,左移一位相当于乘以2的幂,左移n位相当于乘以2的幂。
4)计算过程:
例如:3
1)将3转换成二进制数000000000000000000000000000000000000011,
2)移出数字高位(左)的两个零,其他数字左移2位。
3)低位(右侧)的两位空用零填充。最终结果是000000000000000000000000000000000000000000001100,
换算成十进制就是12。
移动的位数超过了这种类型的最大位数。
如果移动到高位(31或63位),该值将变为负值。以下过程说明了这一点:
Ja代码集合代码
//左移作为乘以2的快速方法。public class MultByTwo { public static void main(String args[]){ int I;int num = 0xFFFFFFEfor(I = 0;我& lt4;i++){ num = num & lt;& lt1;system . out . println(num);} } } 12345678910112131415161718192021复制代码类型:[ja]这个程序的输出如下:
53687090810737418162147483632-321234567复制代码类型:[ja]
注意:N位二进制,最高有效位是符号位,所以数值范围是-2 (n-1)-2 (n-1)-1,所以取模是2 (n-1)。
2、右移运算符
右移位运算符
1)其一般格式如下:
值& gt& gt数字
Num指定移动值的位数。
右移规则只记住一点:符号位不变,符号位加到左边。
2)操作规则:
在二进制形式中,所有数字都按相应位数右移,高空位在低电平移出(丢弃)以补充符号位,即正数填0,负数填1。
当右移的操作数是byte和short类型时,这些类型会自动扩展为int类型。
比如要去掉的值是负数,每右移一次,左边就填1;如果要删除的值是正数,则每次右移都会在左边用0填充。这叫做signextension,它在向右移动。
在运算过程中用来保存负数的符号。
3)数学意义
右移1位相当于除以2,右移n位相当于除以2的n次方。
4)计算过程
11 >;& gt2(11是整型)
1)11的二进制形式是:0000000000000000000000000000000001011。
2)将低位最后两位移出,因为位数为正,所以高位填零。
3)最终结果是00000000000000000000000000000000000010。
转换成十进制是2。
35 >;& gt2(35是整型)
转换为二进制:00000000000000000000000000000000000000010000011
移出低位的最后两位:0000000000000000000000000000000000000000000000000000。
转换成十进制:8
5)向右移动时,不要保持符号出来。
右移后的值与0x0f进行按位与运算,这样就可以丢弃任何符号位扩展,这样得到的值就可以作为下标来定义数组,就可以得到对应数组元素所表示的十六进制字符。
比如Ja代码
(b & gt& gt4)& 0x0F的运算过程:B的二进制形式为:1111 00014位数字移出:1111 1111位AND运算:0000 1111转换成十进制形式:15b & 0x0f运算过程:B的二进制形式为:1111 00010x0f,二进制形式为:0000 1111位AND运算:0000 0001转换成十进制形式:11234567891001
B = 0xf11复制代码类型:[ja]3。无符号右移位无符号右移位运算符> & gt& gt
其一般格式如下:
值& gt& gt& gt数字
Num指定移动值的位数。
无符号右移的规则只记住一点:忽略符号位扩展,0补码最高位。
无符号右移位运算符>;& gt& gt它仅对32位和64位值有意义
“链接”
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。