在 Pharo 中,我想对整数进行位掩码,在 Python 中看起来像这样:

((b1 & 0x3F) << 4) | (b2 >> 4)

我知道 &| 在 Pharo 中工作,但我很确定它们不是位明智的。

最佳答案

但你错了:)

看一下 Pharo 中 &|<<>> 的实现:

& 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

这基本上意味着您的代码将开箱即用,除了将十六进制 C 样式转换为十六进制 Pharo 样式:
((b1 & 16r3F) << 4) | (b2 >> 4)

关于bitwise-operators - 如何做位掩码操作Pharo?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56301961/

10-09 13:18