2015-01-27 2 views
0

у меня странный вопрос, который я не могу показаться, чтобы решить так надеюсь, что преобразование это в какой-то другой форме поможет:новообращенный INT в двоичную в Smalltalk VisualWorks

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

теперь вопрос coder является значение от 0 к F, когда я получаю 5, я хочу, чтобы он обрабатывался как 0101, так что он ЛОЖЬ от isBitSet:. BUT isBitSet: рассматривает его как 101, так что это всегда правда ... так что в основном isBitSet: не работает ни для одного двоичного числа, которое длится 4 бита, если оно равно нулю ... как я могу получить свои пять, чтобы я мог проверить 4-й бит в числе для 1 или 0?

ответ

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 

Помогло ли это?

+0

Вы являетесь спасателем жизни – DarthSheldon

0

Возможно, вы неправильно интерпретируете нумерацию бит. Причина, по которой 5 isBitSet: 1 оценивает true, состоит в том, что 1 относится к младшему бит. Независимо от того, представлен ли 5 как 101, 0101 или даже 00101 и т. Д., Младший бит всегда 1 и 5 isBitSet: 1 отвечает с true.

Смежные вопросы