位运算移位运算符

2018-06-16 15:19 更新

语法:

ShiftExpression : AdditiveExpression ShiftExpression << AdditiveExpression ShiftExpression >> AdditiveExpression ShiftExpression >>> AdditiveExpression

左移运算符

 表示对左操作数做右操作数指定次数的按位左移操作。

 产生式 ShiftExpression : ShiftExpression << AdditiveExpression 按照下面的过程执行 :

  1. 令 lref 为解释执行 ShiftExpression 的结果 .
  2. 令 lval 为 GetValue(lref).
  3. 令 rref 为解释执行 AdditiveExpression 的结果 .
  4. 令 rval 为 GetValue(rref).
  5. 令 lnum 为 ToInt32(lval).
  6. 令 rnum 为 ToUint32(rval).
  7. 令 shiftCount 为用掩码算出 rnum 的最后五个比特位 , 即计算 rnum & 0x1F 的结果。
  8. 返回 lnum 左移 shiftCount 比特位的结果。结果是一个有符号 32 位整数。

带符号右移运算符

 filling bitwise right shift operation on the left operand by the amount specified by the right operand.

 产生式 ShiftExpression : ShiftExpression >> AdditiveExpression 按照下面的过程执行 :

  1. 令 lref 为解释执行 ShiftExpression 的结果 .
  2. 令 lval 为 GetValue(lref).
  3. 令 rref 为解释执行 AdditiveExpression 的结果 .
  4. 令 rval 为 GetValue(rref).
  5. 令 lnum 为 ToInt32(lval).
  6. 令 rnum 为 ToUint32(rval).
  7. 令 shiftCount 为用掩码算出 rnum 的最后五个比特位 , 即计算 rnum & 0x1F 的结果。
  8. 返回 lnum 带符号扩展的右 移 shiftCount 比特位的结果 . The most significant bit is propagated. 结果是一个有符号 32 位整数。

无符号右移运算符

 Performs a zero-filling bitwise right shift operation on the left operand by the amount specified by the right operand.

 产生式 ShiftExpression : ShiftExpression >>> AdditiveExpression 按照下面的过程执行 :

  1. 令 lref 为解释执行 ShiftExpression 的结果 .
  2. 令 lval 为 GetValue(lref).
  3. 令 rref 为解释执行 AdditiveExpression 的结果 .
  4. 令 rval 为 GetValue(rref).
  5. 令 lnum 为 ToUint32(lval).
  6. 令 rnum 为 ToUint32(rval).
  7. 令 shiftCount 为用掩码算出 rnum 的最后五个比特位 , 即计算 rnum & 0x1F 的结果。
  8. 返回 lnum 做 0 填充右移 shiftCount 比特位的结果 . 缺少的比特位填 0。 结果是一个无符号 32 位整数 .


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号