首页 > 编程知识 正文

java左移运算符,右移运算符例子

时间:2023-05-06 06:54:52 阅读:120244 作者:310

Java移位运算符只是三种类型:“有符号右移位”和“无符号右移位”。

1、左移算子

左移运算符

1 )其一般格式如下:

value num

num指定将值value移位的位数。

请记住左移的一条规则。 丢弃最高有效位。 (符号位也同样废弃。 ) 0补充最低有效位

如果移动的位数超过此类型的最大位数,编译器将对移动的位数进行建模。 相对于int型移动33比特时,实际上只移动332=1比特。

2 )运算规则

以二进制格式将所有数字左移相应的位数,将高位错开(舍弃),将低位空位填充为零。

左移的运算数为int型时,每移动1位,第31位就会移位并废弃。

左移的运算数为long型时,每移动1位,第63位就会移位并废弃。

如果左移的操作数为字节和短整型,则这些类型将自动放大为int型。

3 )数学意义

在数字不溢出的前提下,对于正数和负数,向左移动一位相当于2的1次方,向左移动n位相当于2的n次方

4 )计算流程:

例如,32(3为int型) ) )。

1 )将3转换为二进制的00000000000000000000000000000000000000000001,

2 )去掉该数字高位(左侧)的两个零,其他数字均向左移位两位

3 )低位(右侧)两个空缺补零。 得到的最终结果为00000000000000000000000000000000000000000000001100,

如果转换为十进制数,则为12。

的位数超过了此类型的最大位数。

移动到高位(31或63位)时,该值为负值。 下一步说明了这一点。

//leftshiftingasaquickwaytomultiplyby 2。

公共类多字节

publicstaticvoidmain (string args [ ] ) {

int i;

int num=0xFFFFFFE;

for(I=0; i4; I ) {

num=num 1;

system.out.println(num;

}

}

}

该程序的输出如下。

536870908

1073741816

2147483632

-32

注意:由于n位二进制、最高位为符号位,所以显示的数值范围为-2^(n-1 )~2^(n-1 )-1,因此震级为2^(n-1 )。

2、右移位算子

右移位运算符

1 )其一般格式如下:

value num

num指定将值value移位的位数。

请记住右移的一条规则。 符号位不变。 在左侧添加符号位

2 )运算规则:

以二进制形式将所有数字向右移动对应的位数,截断较低的位数。 高位空位补记位,即正数补零,负数补1

如果右移位的操作数为字节和短整型,则这些类型将自动放大为整型。

例如,如果要删除的值为负数,则每次向右移动时向左添加1;如果要删除的值为正数,则每次向右移动时向左添加0。 将其称为符号位扩展(保留符号位),然后向右移动

操作时用于保持负数的符号。

3 )数学意义

右一位移动相当于除以2,右n位移动相当于除以2的n次幂。

4 )计算流程

12(11为int型) ) )。

1 ) 11的二进制格式为000000000000000000000000000000000000000000000011

2 )去掉低位的最后两个数字,因为那个数字是正数,所以用高位补零。

3 )最终结果为0000000000000000000000000000000000000000000。

如果转换为十进制数,则为3。

32(35为int型) ) )。

35转换为二进制: 0000000000000000000000000000000000000000000100011

将低位的最后两个数字移动到000000000000000000000000000000000000000000000000

转换为十进制: 8

3、无符号右移

无符号右移运算符

一般格式如下。

value num

num指定将值value移位的位数。

请记住,无符号右移位规则忽略符号位扩展,而0补充最高有效位

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。