Если у нас есть данное число, скажем, 9 (двоичное представление - 1001). Как мы можем наиболее эффективно получить его обратно 6 (двоичное представление - 0110)? то есть замена 0 на 1 и 1 на 0.
Я написал код порядка O (1) сложности? Но может ли быть лучший путь? Предоставляет ли Swift элегантный способ справиться с этим?
Примечание: функция отрицания ~ 9 приводит к -10. Это не то, что я ищу.
func inverse(of givenNumber: Int) -> Int // eg. 9
{
let binaryRepresentation = String(givenNumber, radix: 2) // "1001"
let binaryRepresentationLength = binaryRepresentation.count // 4
let maxValueInLength = (1 << binaryRepresentationLength) - 1 // 15, i.e., 1111
let answer = givenNumber ^ maxValueInLength // 6, i.e., 0110
return answer
}
Редактировать 1: данный номер> 0