2017-02-09 3 views
-1

Если отрицательное число от -31 до -1, то я хотел бы представить его в формате 111XXXXX. Я пытаюсь сделать это с помощью «и» побитового оператора:Побитовая операция «и» в kotlin

println("0b00011111 & 0xe0 is ${0b00011111 and 0xe0}") 
println("31 & 0xe0 is ${31 and 0xe0}") 
println("0b00011111 & 0b11100000 is ${0b00011111 and 0b11100000}") 

Но результат всегда 0. Где я сделал ошибку?

+0

Опишите свои фактические результаты (0), но какие вы ожидаете результатов? – mfulton26

+0

Я ожидаю, что результатом будет 0b11111111 или 255. –

+2

Oh! Я понимаю. Я использую неправильный оператор. Вопрос может быть закрыт. –

ответ

0

Он печатает 0, потому что 00011111 and 11100000 всегда возвращает 0. Тип возврата and - Int, поэтому, если вы хотите распечатать его в базе 2 с ведущими нулями, вам необходимо отформатировать его.

Чтобы преобразовать его в String в базе 2, вы можете вызвать метод toString на Int с параметром натальной:

val numberString = (0b00011111 and 0b11100000).toString(2); 

Это даст вам номер в двоичном формате, но без ведущих нулей. Для получения нужного формата вам нужно левую панель с нулями. Я оставляю эту задачу до вас (hint: padStart);)

+0

Печать - пример. Я хотел бы напечатать номер Int. Почему {0b00011111 и 0b11100000} всегда возвращает 0? 0b00011111 - номер Int. 0b11100000 - номер Int. И возвращает Int. –

+0

Это всегда 0, потому что это то, что математически. Что вы имеете в виду? – marstran

+0

Лучшим способом (imo) для преобразования в строку будет '(0b00011111 и 0x11100000) .toString (2)'. Таким образом, вам не нужно использовать классы Java – therealfarfetchd

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