Очистить бит с помощью побитовых операций swift - PullRequest
0 голосов
/ 18 октября 2018

Я хочу очистить i-й элемент в целочисленном представлении бита.

Моя попытка следующая

func clearBit (num: Int, i: Int) -> Int{
    let mask = (~(1 << i))
    return ( num & mask )
}

Теперь мой первый пример работает, как и ожидалось:

clearBit(num: 10011, i: 0) // == 10010

Однако удаление 1-го элемента

clearBit(num: 10011, i: 1) // == 10009

не равно ожидаемому результату 10010.

Куда я иду не так?

1 Ответ

0 голосов
/ 18 октября 2018

Вы передаете десятичное число 10011, а не двоичное число с битами 1 0 0 1 1.Вы должны добавить префикс числа к 0b, если вы хотите, чтобы он обрабатывался как двоичный:

let number = 0b10011        // 19
clearBit(num: number, i: 1) // 17

Позже, если вы хотите отобразить эти числа как двоичные, вы можете преобразовать их в строки в базе 2:

String(19, radix: 2) // "10011"
String(17, radix: 2) // "10001"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...