+ 1

Как получить отрицательное число?

print(int('ff49', 16))# должно быть -183, а выдаëт 65353

6th Oct 2021, 12:26 PM
Алёша Попович
Алёша Попович - avatar
8 ответов
+ 1
Чтобы преобразовать из систоюемы с минусом в систему без минуса, нужно инвертировать и добавить 1, а из hex в десятиричную ты правильно преобразоовал))
6th Oct 2021, 1:41 PM
Aleksei Radchenkov
Aleksei Radchenkov - avatar
+ 1
Оно выдаёт 65353 потому что 0xFF49 = 65353d Чтобы выдать -183, нужно использовать hex '-b7' Вот так: https://code.sololearn.com/cJDLWQ0NA5kW/?ref=app
6th Oct 2021, 12:42 PM
Aleksei Radchenkov
Aleksei Radchenkov - avatar
+ 1
Попробуйте в калькуляторе виндовском. Там -183.
6th Oct 2021, 12:45 PM
Алёша Попович
Алёша Попович - avatar
+ 1
Число изначально отрицательное: 0xff49.
6th Oct 2021, 12:45 PM
Алёша Попович
Алёша Попович - avatar
+ 1
Алёша Попович, да просто это разные методы хоронить отрицательные значения... В машинном коде будет 0xFF49 А обычное 16 ричное число будет -0xb7.... Поскольку в машинном коде нельзя использовать - для отрицательных чисел, их обычно инвиртируют и добовляют 1... Арифметика до сих пор так работает, но чтобы знать положительное число или отрицательное, нужен флаг ALU... (это а функция принимает обычные 16 ричные числа..)
6th Oct 2021, 12:57 PM
Aleksei Radchenkov
Aleksei Radchenkov - avatar
+ 1
Алёша Попович, decimal тож не поможет... Можно сделать битовую маску (бинарную)... Но тип зачем? Нельзя обычными числами пользоваться?
6th Oct 2021, 1:31 PM
Aleksei Radchenkov
Aleksei Radchenkov - avatar
0
Т. е. int мне не поможет? А decimal?
6th Oct 2021, 1:10 PM
Алёша Попович
Алёша Попович - avatar
0
Нет, только в шестнадцатеричной и как есть, положительные и отрицательные, вопрос как корректно преобразовывать. Когда-то было что-то про избыточное добавление, но не могу вспомнить.
6th Oct 2021, 1:35 PM
Алёша Попович
Алёша Попович - avatar