import struct
def decode_ieee754(n: int, verbose: bool = False) -> float:
"""
Разбирает 32-битное целое число на компоненты стандарта IEEE 754
и вычисляет число с плавающей точкой (float).
"""
# Определение битовых масок для 32-битного числа[span_0](start_span)[span_0](end_span)
sign_bit_mask = 0x80_00_00_00 # 31 бит[span_1](start_span)[span_1](end_span)
exp_bit_mask = 0x7F_80_00_00 # 30-23 биты[span_2](start_span)[span_2](end_span)
significand_bit_mask = 0x00_7F_FF_FF # 22-0 биты[span_3](start_span)[span_3](end_span)
# Извлечение знака, экспоненты и мантиссы (significand) с помощью побитовых операций[span_4](start_span)[span_4](end_span)
sign = (n & sign_bit_mask) >> 31[span_5](start_span)[span_5](end_span)
exp = (n & exp_bit_mask) >> 23[span_6](start_span)[span_6](end_span)
significand = (n & significand_bit_mask)[span_7](start_span)[span_7](end_span)
# Вычисление итогового значения по формуле стандарта IEEE 754[span_8](start_span)[span_8](end_span)
# Добавлена проверка на 0, чтобы избежать ошибок при нулевой экспоненте
if exp == 0 and significand == 0:
float_from_ieee754 = 0.0
else:
float_from_ieee754 = (-1)**sign * 2**(exp - 127) * (1 + significand / 2**23)[span_9](start_span)[span_9](end_span)
# Блок вывода информации, если включен режим verbose
if verbose:
print(f"Число n: {n:032b}")[span_10](start_span)[span_10](end_span)
print(f"31 (sign): {sign:032b} (dec: {sign})")[span_11](start_span)[span_11](end_span)[span_12](start_span)[span_12](end_span)
print(f"exp.: {exp:032b} (dec: {exp})")[span_13](start_span)[span_13](end_span)[span_14](start_span)[span_14](end_span)
print(f"22-0 (mant.): {significand:032b} (dec: {significand})")[span_15](start_span)[span_15](end_span)[span_16](start_span)[span_16](end_span)
# Проверка через встроенный модуль struct (исправлена синтаксическая ошибка)[span_17](start_span)[span_17](end_span)
raw_bytes = struct.pack('>I', n)[span_18](start_span)[span_18](end_span)
# unpack возвращает кортеж, поэтому берем первый элемент [0]
float_from_bytes = struct.unpack('>f', raw_bytes)[0]
print(f"\nЗначение через struct: {float_from_bytes}")
print(f"Значение через формулу: {float_from_ieee754}")[span_19](start_span)[span_19](end_span)
return float_from_ieee754
# Пример использования функции:
number = 12345678[span_20](start_span)[span_20](end_span)
result = decode_ieee754(number, verbose=True)