0

我有一个似乎无法解决的奇怪问题,因此希望将其转换为其他形式会有所帮助:

|coder response|
(coder isBitSet: 1)
ifFalse:[self flagSuccess]
ifTrue:[self flagFailure].

现在的问题是coder一个从 0 到 F 的值,当我得到一个 5 时,我希望它被视为 0101,因此它是 FALSE 从isBitSet:. 但是isBitSet:将其视为 101,所以它总是正确的......所以基本上isBitSet:不适用于任何 4 位长的二进制数,除非该数字为零......我怎样才能得到我的五个以便我可以检查第 4 位1 或 0 的数字?

4

2 回答 2

3

尝试使用 bitAt: 方法。此方法从整数中提取一个位并告诉您它是 1 还是 0。它将提取您想要的任何位并将高于整数大小的位视为 0。

   5 bitAt: 1  ==> 1
   5 bitAt: 2  ==> 0
   5 bitAt: 3  ==> 1
   5 bitAt: 4  ==> 0
   5 bitAt: 5  ==> 0

这有帮助吗?

于 2015-01-27T23:45:30.497 回答
0

您可能没有正确解释位编号。5 isBitSet: 1评估为的原因true1指最低位。无论是否5表示为1010101甚至00101等,最低位始终为1,并5 isBitSet: 1回答为true

于 2015-01-28T10:17:36.140 回答