Тема: python 3.2.3 неправильно інвертує числа?
Вирішив освіжити память і тут таке:
>>> bin(100)
'0b1100100'
>>> bin(~100)
'-0b1100101'
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Python → python 3.2.3 неправильно інвертує числа?
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Вирішив освіжити память і тут таке:
>>> bin(100)
'0b1100100'
>>> bin(~100)
'-0b1100101'
Ні, це ви неправильно сприймаєте те, що він вам пише. Знак "-" в рядку 4 бачите?
Подальше читання:
1. http://uk.wikipedia.org/wiki/Доповняльний_код
2. http://segfault.kyiv.ua/smart-questions-ru.html#classic
Вопрос:
Моя программа не работает. Я думаю, проблема в системном компоненте X.Ответ:
Хотя и возможно, что именно вы первым обнаружили очевидную ошибку в системных вызовах и библиотеках, интенсивно используемых сотнями или тысячами разработчиков, но намного вероятнее, что вы просто не разобрались. Серьезные утверждения требуют серьезных доказательств; если вы делаете подобные утверждения, их надо подкреплять ясным и исчерпывающим описанием ситуации, в которой возникает сбой.
моє питання)))
але як тоді його нормально інвертувати?
Що ви розумієте під "нормальним інвертуванням" і чим воно відрізняється від того, що робить Python?
замінити всі нулі на одиниці і одиниці на нулі, а не так як в пітоні [-][число в доповнювальному коді]
наприклад
>>> x = ~5
>>> x + 1
-5
>>> bin(~5)
'-0b110'
>>>
результат x+1 мав бути 3
тобто ~5 це -110 => 001 + 1 = 010
тоді 010 + 1 = 011 тобто 3
В пітоні все правильно з інверсією, це ви неправильно розумієте доповнювальний код. Перший розряд числа - знаковий, а беззнакових типів в пітоні не буває. Тому інверсія 5 (0...0101) - це -6 (1...1010). Ваша проблема не в інверсії, а у виводі числа: ви хочете, щоб воно було беззнакове, а воно зі знаком. Напишіть власну процедуру перетворення числа в рядок з двійковим ASCII-кодом і матимете те, що вам треба.
вже написав)))
def invert(n):
mask = '0b' + (bin(n).split('b')[-1].replace('0', '1'));
return bin( int(mask, 2) & ~n );
Якщо це вас влаштовує, то радий за вас. Але ще раз - тут мова має йти за перетворення числа на рядок в потрібному вам форматі, а не за інверсію. Інверсія правильна.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися