2012年(32)
分类: Python/Ruby
2012-03-25 15:45:31
位运算符( << >> & ^ | )
(bitwise operator)
(一)位运算符
位运算符属于二元运算符,有这么5种:<< >> & ^ | 。他们之间的优先级关系为:
运算符
优先级
<< >>
高
&
^
|
低
在redy中每一个位运算符在抽象语法树中,都会用一个结点来表示:
这5个结点都继承AstNodeBinaryExpr,用uml表示为:
图1
(二)实例
下面来看两个位运算符表达式相应的语法树
表达式:1>>3|5<<2&1+2^7
图2
表达式:~8<<4|7*5>>8+2
图3
(三)执行方法:
AstNodeLShift的执行方法为:
代码3.1
- AstNodeLShift.execute()
- AstNodeLShift.b_left.execute() /*执行左结点*/
- left_value=reg0 /*左结点执行后的结果保存在寄存器reg0中*/
- AstNodeLShift.b_right.execute() /*执行右结点*/
- right_value=reg0 /*右执点的执行结果同样也保存在寄存器reg0中*/
- ret_value=left_value.lshift(right_value) /*调用方法lshift*/
- reg0=ret_value /*把执行后的结果保存在寄存器reg0中*/
- end
AstNodeRShift的执行方法为:
代码3.2
- AstNodeRShift.execute()
- AstNodeRShift.b_left.execute() /*执行左结点*/
- left_value=reg0 /*左结点执行后的结果保存在寄存器reg0中*/
- AstNodeRShift.b_right.execute() /*执行右结点*/
- right_value=reg0 /*右执点的执行结果同样也保存在寄存器reg0中*/
- ret_value=left_value.rshift(right_value) /*调用方法rshift*/
- reg0=ret_value /*把执行后的结果保存在寄存器reg0中*/
- end
AstNodeBitAnd的执行方法为:
代码3.3
- AstNodeBitAnd.execute()
- AstNodeBitAnd.b_left.execute() /*执行左结点*/
- left_value=reg0 /*左结点执行后的结果保存在寄存器reg0中*/
- AstNodeBitAnd.b_right.execute() /*执行右结点*/
- right_value=reg0 /*右执点的执行结果同样也保存在寄存器reg0中*/
- ret_value=left_value.bit_and(right_value) /*调用方法bit_and*/
- reg0=ret_value /*把执行后的结果保存在寄存器reg0中*/
- end
AstNodeBitXor的执行方法为:
代码3.4
- AstNodeBitXor.execute()
- AstNodeBitXor.b_left.execute() /*执行左结点*/
- left_value=reg0 /*左结点执行后的结果保存在寄存器reg0中*/
- AstNodeBitXor.b_right.execute() /*执行右结点*/
- right_value=reg0 /*右执点的执行结果同样也保存在寄存器reg0中*/
- ret_value=left_value.bit_xor(right_value) /*调用方法bit_xor*/
- reg0=ret_value /*把执行后的结果保存在寄存器reg0中*/
- end
AstNodeBitOr的执行方法为:
代码3.5
- AstNodeBitOr.execute()
- AstNodeBitOr.b_left.execute() /*执行左结点*/
- left_value=reg0 /*左结点执行后的结果保存在寄存器reg0中*/
- AstNodeBitOr.b_right.execute() /*执行右结点*/
- right_value=reg0 /*右执点的执行结果同样也保存在寄存器reg0中*/
- ret_value=left_value.bit_or(right_value) /*调用方法bit_or*/
- reg0=ret_value /*把执行后的结果保存在寄存器reg0中*/
- end
附: 代码下载: git clone git://git.code.sf.net/p/redy/code redy-code
AstNodeLShift AstNodeRShift AstNodeBitAnd AstNodeBitXor AstNodeBitOr 位于src/syntax/ 文件ast_node_binary_expr中
最大行业软件2012-12-01 10:39:15
PTC Creo Elements/Pro 5.0 M070 Working for Win32-ISO 1DVD(最新多语言正式版包括简、繁体中文)
PTC Creo Elements/Pro 5.0 M070 Working for Win64-ISO 1DVD
PTC Creo Elements View (ex Product View) v10 F000 build 93 Pro Multilanguage Win32 1CD
PTC Creo Elements View (ex Product View) v10 F000 build 93 Pro Multilanguage Win64 1CD
PTC Pro/E WildFire+Pro/Mechancia 4.0 M110 Working for Win32-ISO 1DVD(最新多语言正式版包括简、繁体中文)
PTC Pro/E Wil