# 1.
# Полагаю, что в техническом задании ошибка и считаю фразу "делятся на" фразой "целочисленно делятся на".
def IsDivisible(digit, n): return (digit % n == 0)
digits=range(20, 50 + 1)
required=[str(digit) for digit in digits if IsDivisible(digit, 2) and not IsDivisible(digit, 5)]
print("Result:\n", '\n'.join(required))
# 2.
# Боль от запятой. Голову изломал от этого дробного остатка...
digits=range(35, 87 + 1)
required=[str(digit) for digit in digits if digit % 7 == 1 or digit % 7 == 2 or digit % 7 == 5]
print("Result:\n", '\n'.join(required))
а) представим -17₁₀ в обратном коде на 8-битном регистре
- запишем число 17₁₀ в двоичной системе: 10001₂
- дополним его слева нулями до 8 знаков: 00010001
- поскольку число отрицательное, инвертируем каждый разряд, т.е. заменяем 0 на 1, а 1 на 0: 11101110
б) представим 22 в обратном коде на 8-битном регистре
- запишем число 22₁₀ в двоичной системе: 10110₂
- дополним его слева нулями до 8 знаков: 00010110
- поскольку число положительное, его не нужно менять.
в) выполняем сложение
Возник перенос в девятый разряд, которого у нас нет (т.е. фактически произошло переполнение регистра). В этом случае перенос нужно осуществить в младший разряд, т.е. сложить результат с единицей
и окончательно получим 00000101
Задание 2.
а) представим -17₁₀ в дополнительном коде на 8-битном регистре
- запишем число 17₁₀ в двоичной системе: 10001₂
- дополним его слева нулями до 8 знаков: 00010001
- поскольку число отрицательное, инвертируем каждый разряд, т.е. заменяем 0 на 1, а 1 на 0: 11101110
- прибавляем единицу в младший разряд: 11101111
б) представим 22 в дополнительном коде на 8-битном регистре
- запишем число 22₁₀ в двоичной системе: 10110₂
- дополним его слева нулями до 8 знаков: 00010110
- поскольку число положительное, его не нужно менять.
в) выполняем сложение
Возник перенос в девятый разряд, которого у нас нет (т.е. фактически произошло переполнение регистра). При суммировании в дополнительном коде переполнение игнорируется, поэтому результат не меняется.