#iphone #base-conversion
#iPhone #базовое преобразование
Вопрос:
Я хочу преобразовать десятичное число в двоичное число. Я использую этот метод:
- (NSMutableString*)intStringToBinary:(long long)element{
NSMutableString *str = [[NSMutableString alloc] initWithString:@""];
for(NSInteger numberCopy = element; numberCopy > 0; numberCopy >>= 1)
{
[str insertString:((numberCopy amp; 1) ? @"1" : @"0") atIndex:0];
}
return str;
}
все идет хорошо, если число «элемент» равно> 0. Если число <0, возникает проблема. Например, метод не может преобразовать число «-1». Что я могу сделать, чтобы решить проблему? Заранее спасибо!!
Комментарии:
1. У вас потенциально утечка памяти, вы должны возвращать автоматически выпущенную изменяемую строку.
Ответ №1:
Вам нужен дополнительный бит для знака.
Пример:
1xxxx
представляет двоичное число xxxx
.
0yyyy
представляет двоичное число - yyyy
.
Ответ №2:
Вот способ сделать это на 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)]