Преобразование десятичного числа в двоичное

Я хочу преобразовать десятичное число в двоичное число. Я использую этот метод:

- (NSMutableString*)intStringToBinary:(long long)element{
    NSMutableString *str = [[NSMutableString alloc] initWithString:@""];
    for(NSInteger numberCopy = element; numberCopy > 0; numberCopy >>= 1)
    {
        [str insertString:((numberCopy & 1) ? @"1" : @"0") atIndex:0];
    }
    return str;
}

все идет нормально, если число "элемент" > 0. Если число ‹0, есть проблема. Например, метод не может преобразовать число «-1». Что я могу сделать, чтобы решить проблему? Заранее спасибо!!


person V-JAY    schedule 05.10.2011    source источник
comment
У вас потенциально утечка памяти, вы должны возвращать изменяемую строку с автоматическим освобождением.   -  person jrturton    schedule 05.10.2011


Ответы (2)


Вам нужен дополнительный бит для знака.

Пример:

1xxxx представляет двоичное число + xxxx.

0yyyy представляет двоичное число - yyyy.

person Dennis    schedule 05.10.2011

Вот способ сделать это на Python с помощью алгоритма Валлара. Вход и выход - списки.

from math import *
def baseExpansion(n,c,b):
    j = 0
    base10 = sum([pow(c,len(n)-k-1)*n[k] for k in range(0,len(n))])
    while floor(base10/pow(b,j)) != 0: j = j+1
    return [floor(base10/pow(b,j-p)) % b for p in range(1,j+1)]
person Alex    schedule 03.11.2011