Есть стандарт IEEE 754 двоичного представления чисел и их арифметики. В нем описываются нормализованные числа и ненормализованные. В теории все понятно. Но я хочу на консоль распечатать несколько ненормализованных чисел в их внутреннем представлении, машинном, т.е. с характеристикой и мантиссой. Как это можно сделать, например, на Python, C#? И еще попутно вопрос. Можно ли работать в языках высокого уровня с вещественными литералами в двоичной системе счисления?
Но я хочу на консоль распечатать несколько ненормализованных чисел в их внутреннем представлении, машинном, т.е. с характеристикой и мантиссой
На Python3 на основе ответа с EnSO:
import struct
def binary(num):
bins = tuple(bit for byte in (tuple(bin(c).replace('0b', '').rjust(8, '0'))\
for c in struct.pack('!f', num)) for bit in byte)
print(bins[0] + ' ' + ''.join(bins[1:9]) + ' ' + ''.join(bins[9:]))
binary(1.0)
binary(-1.0)
binary(1.175494351e-38)
binary(1.401298464e-45)
Отдельно выводятся знак, порядок (смещённый) и мантисса.
Для чисел двойной точности нужно заменить !f
на !d
и соответственно выводить больше байт для порядка:
import struct
def binary(num):
bins = tuple(bit for byte in (tuple(bin(c).replace('0b', '').rjust(8, '0'))\
for c in struct.pack('!d', num)) for bit in byte)
print(bins[0] + ' ' + ''.join(bins[1:12]) + ' ' + ''.join(bins[12:]))
binary(2.716154612436e-312)
Чтобы перевести биты обратно в число, можно использовать такую функцию:
def binary_to_float(num):
return struct.unpack("!f", int(num, 2).to_bytes(4, byteorder='big'))[0]
print(binary_to_float('10111111100000000000000000000000'))
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Возможно ли запустить программу командой через rdp или ssh зная ток имя файла, если да, то можно поподробнее?
Как вывести все подряд данные из таблицы в Unity? Есть такой код, но выдает ошибку: