计算机基础-位移运算符

位移运算符

有符号左移 <<

向左移动x位(顶点在哪个方向就往哪个方向移动),无论正负数低位(最右边)都补x个0;

正数示例:20 << 2

20的二进制(反码,补码):0001 0100   
         向左移动两位后:0101 0000
          结果:80[十进制]

负数示例:-20 << 2

原码:1001 0100
反码:1110 1011      // 符号位不变,其他位全部取反
补码:1110 1100      // 反码+1
左移两位后:1011 0000
反码:1010 1111      // 在右移动后的补上上-1
原码:1101 0000      // 除符号位外,反码其他位全部取反
结果:-80[十进制]

有符号右移 >>

向右移动x位,如果该数是正数,则高位(最左边)补x个0,如果是负数,则最高位补x个1

正数示例:20>>2

原码(反码,补码):00010100
    右移两位(最左边两位添0)
原码(反码,补码):00000101
结果:5[十进制]

负数示例:-20 >> 2

原码:10010100
反码:11101011    // 符号位不变,其他位取反
补码:11101100    // 反码 + 1
右移两位(最左边两位添1)
补码:11111011
反码:11111010    // 补码 - 1
原码:10000101    // 符号位不变,其他位取反
结果:-5[十进制]

无符号右移>>>

和>>类似,但不关注符号位(不关注正负数的不同),左侧全部补0;

正数示例:2>>>1

原码(反码,补码):00000000 00000000 00000000 00000010
   右移一位(最左边一位添0)
原码(反码,补码):00000000 00000000 00000000 00000001
结果:1[十进制]

负数示例:-2>>>1

原码:10000000 00000000 00000000 00000010
反码:11111111 11111111 11111111 11111101  // 符号位不变,其他位取反
补码:11111111 11111111 11111111 11111110  // 反码 + 1
右移1位(无符号位运算符,最左边一位只添0)
补码:01111111 11111111 11111111 11111111
反码:01111111 11111111 11111111 11111111  // 高位为0,正数
原码:01111111 11111111 11111111 11111111  // 与反码相同
结果:2147483647

参考的学习链接: 点击进入


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值