Преобразовать 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,

Другие вопросы по тегам