特定的python如果构造

Dak*_*kar 0 python conditional-statements

我正在尝试将Python实用程序转换为Ruby.问题是不太了解python.

该实用程序的一个片段包括以下if条件:

if bits&0x10==0x10: 
Run Code Online (Sandbox Code Playgroud)

那是什么意思?bits是一个变量.它是某种"缩短""&&",意味着如果位非零并且值为0x10?谢谢!

ent*_*opy 6

&单是按位与操作.即,bits与0x10逐位进行比较,如果两者都有该位的位,1则结果1为该位置,否则为0.

基本上,由于0x10是二进制10000,这是检查第5位bits是否设置为1.

我不太了解红宝石,但我的猜测是,它应该有一个按位和操作符,它可能&也是如此.因此,这段特殊的代码最终会在ruby中完全相同.

编辑:根据Ruby Operators页面.在"Ruby Bitwise Operators"一节中,&它也是一个按位和ruby,所以你可以保持这个在你的实用程序的翻译中,它确实应该工作.


Abh*_*jit 5

它实际上检查是否设置了可变位的第5位

这个怎么运作

  • &是按位的.

  • 0x10是二进制值0b10000的十六进制

  • 所以,你做什么都在逐位安定bits0b10000

此外,Ruby支持用于逐位测试的类似构造

if (bits&0x10)
    ......
end
Run Code Online (Sandbox Code Playgroud)

请注意,Tim提到,您的Python构造可以简化为

if bits&0x10:
    .......
Run Code Online (Sandbox Code Playgroud)