在 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
表示为 101
、0101
甚至 00101
等,最低位始终是 1
和 5 isBitSet: 1
答案true
.
我有一个似乎无法解决的奇怪问题,因此希望将其转换为其他形式会有所帮助:
|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
表示为 101
、0101
甚至 00101
等,最低位始终是 1
和 5 isBitSet: 1
答案true
.