如何做掩码操作Pharo?

Fuh*_*tor 3 bitwise-operators pharo

在Pharo中,我想对整数进行位掩码,在Python中如下所示:

((b1 & 0x3F) << 4) | (b2 >> 4)
Run Code Online (Sandbox Code Playgroud)

我知道这一点,&并且|在Pharo工作,但是我很确定他们不是明智之举。

Est*_*nLM 6

但是你错了:)

看的实施&|<<>>在菲罗:

& aNumber
    ^ self bitAnd: aNumber

| anInteger
    ^self bitOr: anInteger

<< shiftAmount
    "left shift"

    shiftAmount < 0 ifTrue: [self error: 'negative arg'].
    ^ self bitShift: shiftAmount

>> shiftAmount
    "right shift"

    shiftAmount < 0 ifTrue: [self error: 'negative arg'].
    ^ self bitShift: 0 - shiftAmount
Run Code Online (Sandbox Code Playgroud)

这基本上意味着您的代码将可以立即使用,除了将十六进制C样式转换为十六进制Pharo样式之外:

((b1 & 16r3F) << 4) | (b2 >> 4)
Run Code Online (Sandbox Code Playgroud)

  • 对。对于像我这样在掩蔽方面工作很多的人;) (2认同)