Представление .net с плавающей запятой в памяти

Согласно Статья Джона Скита о поплавках, установка знакового бита в 1, а все остальное в 0 все равно дает число 0. Я не уверен на 100%, является ли знаковый бит самым первым битом (как сказано в статье) или самым последним битом ( как описано в документы). Несмотря на это, я пробовал оба:

byte[] buf = new byte[4];
buf[0] = 0b10000000;
buf[1] = 0b00000000;
buf[2] = 0b00000000;
buf[3] = 0b00000000;
float f = BitConverter.ToSingle(buf, 0); // 1,793662E-43

buf[0] = 0b00000000;
buf[1] = 0b00000000;
buf[2] = 0b00000000;
buf[3] = 0b00000001;
float g = BitConverter.ToSingle(buf, 0); // 2,350989E-38

И оба не дают 0. Что я не так делаю? Проверка корректности установки всех битов в 0 работает.

! снова поражает Endianness

EOF 13.09.2018 18:21

Спасибо. Это важный намек.

D.R. 13.09.2018 18:21

Тем не менее, документы .NET говорят мне о неправильном порядке битов ?! Я прав?

D.R. 13.09.2018 18:30
1
3
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Благодаря пользователю EOF я понял, что байты .NET не хранятся в (для небитовых хакеров) интуитивно понятном порядке байтов. buf[3] = 0b10000000; делает свое дело.

Только по прошествии двух дней :)

D.R. 13.09.2018 18:37

Другие вопросы по теме