位移详解

Java基础

浏览数:179

2019-11-2

位移运算符:<<、>>、>>>

(1) (int) 144 << 3

  • int:4个字节(一个字节8位),so:32位
  • <<左移运算符
  • 144的二进制左移3位,前面(高位)去000(3个0),后面(低位)补000(3个0)。低位补0
    10010000 -> 10010000000
    结果:1152

注意点:
如果移动的位数超过了该类型的最大位数,编译器会对移动的位数取模移动。如果是int类型移动35位,实际只移动了35%32=3位。

(2) (int)144 >> 3

    1. “>>” 右移运算符
    1. 144的二进制右移3位,后面(低位)去000(3个0),前面(高位)补000(3个0)。高位补0

10010000 -> 10010
结果:18

  • 另一种理解:
    • 左移运算符:num << n
      • 相当于num乘以2的n次方
    • 左移运算符:num >> n
      • 相当于num除以2的n次方

(3) (int)144 >>> 3

  1. 无符号右移运算符
  2. 规则:与>>类似,只是忽略符号位扩展,高位补0
  3. 无符号右移运算符只是对32位和64位的值有意义

其他数据类型依次类推!

作者:JasonDev