Java移位运算符

总结

1.算数左移

        正数:正数原码、反码、补码一致,所以不需要转补码,直接左移3位,高位移除3位,低位用0补齐

        负数:负数需要转反码(除了高位不变,低位相反),再将反码转为补码 即反码+1.补码直接左移3位,高位移除3位,低位用0补齐。因为为负数,所以还需要将补码转为反码,即补码-1,再将反码转为原码,高位不变其余取反

2.算数右移

        正数:正数原码、反码、补码一致,所以不需要转补码,直接右移3位,低位移除3位,高位用符号位补齐。

        负数:负数需要转反码(除了高位不变,低位相反),再将反码转为补码 即反码+1.补码直接右移3位,低位移除3位,高位用符号位补齐。因为符号位不变,因此其还为负数,需要将补码转换为反码,即补码-1,再将反码转为原码,高位不变其余取反

3.逻辑右移

       正数:正数原码、反码、补码一致,所以不需要转补码,直接右移3位,低位移除3位,高位用0补齐。

        负数:负数需要转反码(除了高位不变,低位相反),再将反码转为补码 即反码+1.补码直接右移3位,低位移除3位,高位用0补齐。因为高位补齐的是0,所以其变为正数。正数原码补码反码一致,所以其结果已经出来。

算数左移:例 System.out.print(15<<3)    正数左移

1.将15转换为2进制(正数原码、反码、补码一致)

        15 :00000000 00000000 00000000 00001111(原码)

        15 :00000000 00000000 00000000 00001111(补码)

2.补码左移3位

        120:00000000 00000000 00000000 01111000 

算数左移:例 System.out.print(-15<<3)    负数左移

1.将-15转换为2进制

        -15:10000000 00000000 00000000 00001111(原码)

2.将其转换为反码(首位不变其余取反为反码)

        :11111111 11111111 11111111 11110000(反码)

3.将其转换为补码(反码转补码 :反码加1)

        :11111111 11111111 11111111 11110001(补码)

4.补码左移3位

        :11111111 11111111 11111111 10001000(补码)

5.(因为补码高位为1,为负数 将其转换反码)将补码转换为反码(补码转反码 :反码减一)

        :11111111 11111111 11111111 10000111(反码)

6.将其转换为原码(首位不变其他取反)

       -120 :10000000 00000000 00000000 01111000

算数右移:例 System.out.print(15>>3)    正数右移

1.将15转换为2进制(正数原码、反码、补码一致)

        15 :00000000 00000000 00000000 00001111(原码)

        15 :00000000 00000000 00000000 00001111(补码)

2.补码右移3位(首位缺位用符号位补齐)

        1 :00000000 00000000 00000000 00000001

算数右移:例 System.out.print(-15>>3)    负数右移

1.将-15转换为2进制

        -15:10000000 00000000 00000000 00001111(原码)        

2.将其转换为反码(首位不变其余取反为反码)

        :11111111 11111111 11111111 11110000(反码)

3.将其转换为补码(反码转补码 :反码加1)

        :11111111 11111111 11111111 11110001(补码)

4.右移三位 低位移除高位缺位符号位补齐

        :11111111 11111111 11111111 11111110(补码)

5.补码转反码

        :11111111 11111111 11111111 11111101(反码)

6.反码转原码

      -2  :10000000 00000000 00000000 00000010

逻辑右移:例 System.out.print(15>>>3)    正数右移

1.将15转换为2进制(正数原码、反码、补码一致)

        15 :00000000 00000000 00000000 00001111(原码)

        15 :00000000 00000000 00000000 00001111(补码)

2.补码右移3位(首位缺位用0补齐)

        1 :00000000 00000000 00000000 00000001

逻辑右移:例 System.out.print(-15>>>3)    负数右移

1.将15转换为2进制

        15 :10000000 00000000 00000000 00001111(原码)

2.因为负数 原码转换为反码

        :11111111 11111111 11111111 11110000(反码)

3.反码转为补码

        :11111111 11111111 11111111 11110001(补码)

4.补码右移3位(首位缺位用0补齐)

       536870910 :00011111 11111111 11111111 11111110(补码)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值