1 Востаннє редагувалося bodya-0028 (11.05.2015 19:13:33)

Тема: python 3.2.3 неправильно інвертує числа?

Вирішив освіжити память і тут таке:

>>> bin(100)
'0b1100100'
>>> bin(~100)
'-0b1100101'
Post's attachments

what_png.png 365.33 kb, 297 downloads since 2015-05-11 

2

Re: python 3.2.3 неправильно інвертує числа?

http://replace.org.ua/misc.php?action=p … r=443t4821

Post's attachments

what.jpg 89.27 kb, 248 downloads since 2015-05-11 

3 Востаннє редагувалося koala (11.05.2015 19:24:27)

Re: python 3.2.3 неправильно інвертує числа?

Ні, це ви неправильно сприймаєте те, що він вам пише. Знак "-" в рядку 4 бачите?
Подальше читання:
1. http://uk.wikipedia.org/wiki/Доповняльний_код
2. http://segfault.kiev.ua/smart-questions-ru.html#classic

4

Re: python 3.2.3 неправильно інвертує числа?

Вопрос:   
Моя программа не работает. Я думаю, проблема в системном компоненте X.

Ответ:   
Хотя и возможно, что именно вы первым обнаружили очевидную ошибку в системных вызовах и библиотеках, интенсивно используемых сотнями или тысячами разработчиков, но намного вероятнее, что вы просто не разобрались. Серьезные утверждения требуют серьезных доказательств; если вы делаете подобные утверждения, их надо подкреплять ясным и исчерпывающим описанием ситуации, в которой возникает сбой.

моє питання)))

Подякували: koala1

5

Re: python 3.2.3 неправильно інвертує числа?

але як тоді його нормально інвертувати?

6

Re: python 3.2.3 неправильно інвертує числа?

Що ви розумієте під "нормальним інвертуванням" і чим воно відрізняється від того, що робить Python?

7

Re: python 3.2.3 неправильно інвертує числа?

замінити всі нулі на одиниці і одиниці на нулі, а не так як в пітоні [-][число в доповнювальному коді]
наприклад

>>> x = ~5
>>> x + 1
-5
>>> bin(~5)
'-0b110'
>>>
результат x+1 мав бути 3
тобто ~5 це -110  => 001 + 1 = 010
тоді 010 + 1 = 011 тобто 3

8

Re: python 3.2.3 неправильно інвертує числа?

В пітоні все правильно з інверсією, це ви неправильно розумієте доповнювальний код. Перший розряд числа - знаковий, а беззнакових типів в пітоні не буває. Тому інверсія 5 (0...0101) - це -6 (1...1010). Ваша проблема не в інверсії, а у виводі числа: ви хочете, щоб воно було беззнакове, а воно зі знаком. Напишіть власну процедуру перетворення числа в рядок з двійковим ASCII-кодом і матимете те, що вам треба.

Подякували: bodya-00281

9

Re: python 3.2.3 неправильно інвертує числа?

вже написав)))

def invert(n):
    mask = '0b' + (bin(n).split('b')[-1].replace('0', '1'));
    return bin( int(mask, 2) & ~n );

10

Re: python 3.2.3 неправильно інвертує числа?

Якщо це вас влаштовує, то радий за вас. Але ще раз - тут мова має йти за перетворення числа на рядок в потрібному вам форматі, а не за інверсію. Інверсія правильна.