0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 2
|
||||||
1 | ||||||
Ошибка в битовых сдвигах/битовых масках09.10.2019, 22:44. Показов 849. Ответов 3
Здравствуйте! Написал программу, ориентирующуюся на принцип записи числа по IEEE 754. Требуется вывести сигну, экспоненту и мантису - но почему-то с выводом проблемы. В правильности битовых сдвигов и битовых масок уверен ибо делал всё с предельной ориентировкой на стандарт IEEE 754, однако где-то видимо допустил ошибку по-невнимательности. Просьба высказывать абсолютно все предположения, ибо с этой темой сижу почти неделю - вроде код кажется правильным, постоянно в голове прогоняю а на выходе всё равно что-то да не то. Вводимое число - float.
P.S. Цель этой темы именно разобраться в битовых сдвигах и масках, ибо ,видимо, я не до конца понимаю принцип их работы, либо понимаю но неправильно https://chortle.ccsu.edu/Assem... EEE754.jpg Сам код:
0
|
09.10.2019, 22:44 | |
Ответы с готовыми решениями:
3
Применение битовых операций Особенности битовых сдвигов Задача на освоение битовых операций Упаковка и распаковка 5-битовых кодов |
817 / 504 / 211
Регистрация: 19.01.2019
Сообщений: 1,196
|
||||||
10.10.2019, 02:35 | 2 | |||||
1
|
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 2
|
|
10.10.2019, 15:44 [ТС] | 3 |
Почему так и в чём смысл битовой маски если пропущены нули - обнуления, соответственно, нет?
P.S. Или же это работает с так называемыми незначимыми нулями? Добавлено через 14 минут Почему же именно такая маска?
0
|
817 / 504 / 211
Регистрация: 19.01.2019
Сообщений: 1,196
|
|
10.10.2019, 22:26 | 4 |
int sign = u.i >> 31;
// Сдвинули до последнего бита, стало 0x1 или 0x0. // Конъюнкция лишняя, результат и так 0x1 или 0x0. int exponent = (u.i >> 23) & 0xFF; // Сдвигаем до экспоненты. Она занимает 8 бит. Маска для первых 8 бит - 0xff (000...11111111). // Если не сдвигать, и наложить маску 0x7f800000, то вначале будет 23 ненужных 0. int mantissa = u.i & 0x7FFFFF; // Тут сразу копируем первые 23 бита.
0
|
10.10.2019, 22:26 | |
10.10.2019, 22:26 | |
Помогаю со студенческими работами здесь
4
Использование битовых полей структуры Составить программу для вычисления арифметических, логических и битовых выражений Реализовать длинную арифметику с использованием битовых операций и больших чисел С помощью только битовых операций превратите последний 0 в 1, а все остальное превратить в 0 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |