2016-11-03 6 views
1

Когда я даю например: -2 или -8, я получаю 110, 11000. Но я хочу получить 10, 1000, потому что он должен использовать минимальные двоичные числа. Поэтому я должен использовать другой путь к отрицательным. Я попытался поменять местами 1 и 0, пока не доберусь до LSB 1, но я не могу найти способ.Десятичное значение для двоичного: дополнение двух, лучшее выражение для негативов

(Чтобы помочь вам: dekadikos = demical, diadikos = двоичный, boith = ассистент)

dekadikos = input() 
while dekadikos != "end" : 
    dekadikos = int(dekadikos) 
    if dekadikos > 0 : 
     diadikos = bin(dekadikos) 
     diadikos = (diadikos[2:]) 
     n = int(len(diadikos)) + 1 
     print(diadikos.zfill(n)) 
    elif dekadikos == 0 : 
     diadikos = bin(dekadikos) 
     diadikos = (diadikos[2:]) 
     print(diadikos) 
    else : 
     dekadikos = abs(dekadikos) 
     diadikos = bin(dekadikos) 
     diadikos = (diadikos[2:]) 
     n = int(len(diadikos)) + 1 
     diadikos = diadikos.zfill(n) 
     boithdekadikos = 2**n - dekadikos 
     diadikos = bin(boithdekadikos) 
     diadikos = diadikos[2:] 
     print (diadikos) 
dekadikos = input() 
+0

В вашем минимальном дополнительном коде нотации, как бы вы написать 2? – 3Doubloons

+0

demical: 2 будет двоичным: 10 – giorgosan

+0

Если десятичная цифра равна 10, и вы хотите, чтобы -2 тоже было 10, как вы будете различать 10 значений -2 и 10, что означает 2? – 3Doubloons

ответ

1

Вы могли бы решить эту проблему, сделав два изменения в код последнего else блока (комментировал):

else : 
    dekadikos = abs(dekadikos) 
    diadikos = bin(dekadikos-1) # subtract 1 
    diadikos = (diadikos[2:]) 
    n = int(len(diadikos)) + (dekadikos>1) # add 1 except for 1 
    diadikos = diadikos.zfill(n) 
    boithdekadikos = 2**n - dekadikos 
    diadikos = bin(boithdekadikos) 
    diadikos = diadikos[2:] 
    print (diadikos) 

Похоже, что это длинный метод, чтобы достичь желаемого результата. Во-первых, вы можете использовать format(dekadikos, 'b'), чтобы получить двоичное представление числа без префикса 0b.

Вы могли бы сделать это вместо того, который покрывает положительный, нулевой и отрицательный:

dekadikos = int(dekadikos) 
diadikos = '0' + format(abs(dekadikos)-(dekadikos<0), 'b') 
if dekadikos == 0: 
    diadikos = '0' 
elif dekadikos < 0: 
    diadikos = format(2**(len(diadikos)-(dekadikos==-1)) + dekadikos, 'b') 
print (diadikos) 
Смежные вопросы