Java 左移运算<< 右移运算>> 以及独特的无符号右移运算(根据小题目来理解)

本文深入解析了位运算中的左移(<<)、右移(>>)及无符号右移(>>>)操作。通过具体实例,详细介绍了正数和负数在这些运算中的变化过程,包括补码、原码之间的转换,以及运算后的结果计算方法。

左移运算(<<)

按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

正数左移的运算:

10 << 2

10的二进制数是

 00001010

向左移动两位 (向左移动的两位直接删掉) 低位补0 结果是40

00101000

公式 M << N M*2的N次方

在这里插入图片描述

负数左移的运算

-10 << 2

负数原码转化为补码:符号位不变,数值位按位取反,末尾加1。

负数补码转化为原码:符号位不变,数值位按位取反,末尾加1。

步骤:

-10的原码 :负数的原码就是符号位加上真值的绝对值,

10001010

原码进行反码: 除了符号位不变 各个位取反

11110101

补码:在反码的基础上 +1

11110110

左移后的补码:

11011000

负数补码转化为原码:符号位不变,数值位按位取反,末尾加1。

符号位不变,数值位取反

10100111

原码:+1

10101000        //-40

右移运算(>>)

按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空zhi位补符号位,即正数补零,负数补1。符号位不变。

正数右移运算 :

10>>2

10 的原码

00001010

右移2位

00000010    //2

公式:M/2N

负数的右移运算

-10 >> 2

-10 的原码

10001010

反码:最高位1 不变 其他位取反

11110101

补码:+1 操作

11110110

右移补码:负数右移 高位加1

11111101

负数的补码转原码 :最高位1 不变 其他位取反操作

10000010

然后加1

10000011       //结果 -3

无符号右移(>>>)

按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。

正数无符号右移

10 >>> 2

10 的 二进制数:

00000000     00000000    00000000    00001010

右移

00000000     00000000    00000000    00000010

负数无符号右移(恐怖如斯)

只是对32位和64位的值有意义 ( 无论正负高位都是0 )

-10 >>> 2

-10 的 原码:

10000000   00000000   00000000   00001010

反码:

11111111     11111111    11111111   11110101

+1 得到 补码

11111111     11111111    11111111   11110110

右移 高位补0 在IDEA中运算高位的0是省略的

00111111     11111111    11111111   11111101          //1073741821

在这里插入图片描述

测试工具 位置之间不可以有空格 我是为了能让大家看清 ,还有这个在线进制转换工具真不错

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值