ja移位

只有三种Ja移位操作符:& gt(带符号右移)和>;& gt& gt(无符号右移)。

java移位

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位值有意义

“链接”

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

发表回复

登录后才能评论