Преобразовать int в двоичный файл в smalltalk visualworks
У меня есть странная проблема, которую я не могу решить, поэтому надеюсь, что преобразование этой формы в другую форму поможет:
|coder response|
(coder isBitSet: 1)
ifFalse:[self flagSuccess]
ifTrue:[self flagFailure].
сейчас проблема coder
это значение от 0 до F, когда я получаю 5, я хочу, чтобы это трактовалось как 0101, так что это ЛОЖЬ от isBitSet:
, НО isBitSet:
трактует это как 101, так что это всегда так... так что в основном isBitSet:
не работает ни для одного двоичного числа длиной 4 бита, ЕСЛИ БЕЗ числа равно нулю... как я могу получить свои пять, чтобы я мог проверить 4-й бит в числе на 1 или 0?
2 ответа
Попробуйте использовать метод 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
,