在 smalltalk visualworks 中将 int 转换为二进制

convert int to binary in smalltalk visualworks

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

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

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

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

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

有帮助吗?

您可能没有正确解释位编号。 5 isBitSet: 1 计算为 true 的原因是 1 指的是最低位。无论 5 表示为 1010101 甚至 00101 等,最低位始终是 15 isBitSet: 1 答案true.