Имеется некоторое число float. Необходимо написать программу, которая заменяет в представлении этого числа последний байт на значение "0xAA" и, после изменения, выводит новое число(полученное в результате изменения). Буду благодарен за вашу помощь.
Непонятно, старший или младший байт... Потому написал для обоих.
int main()
{
assert(sizeof(float) == sizeof(unsigned int));
float f,save;
scanf("%f",&f);
save = f;
unsigned int * p = (unsigned int *)&f;
printf("%10f %08X\n",f,*p);
*p = (*p&0xFFFFFF00) | 0xAA; // Младший байт
printf("%10f %08X\n",f,*p);
f = save;
*p = (*p&0x00FFFFFF) | (0xAA << 24); // Старший байт
printf("%10f %08X\n",f,*p);
}
Можно использовать следующий подход
#include <iostream>
#include <iomanip>
#include <cstdint>
//...
float x = 123.456789;
std::cout << "x = " << std::setprecision(16) << x << std::endl;
std::cout << "x = " << std::hex << reinterpret_cast<uint32_t &>( x ) << std::endl;
reinterpret_cast<uint32_t &>(x) &= ~(uint32_t)0 << 8;
std::cout << "x = " << std::setprecision( 16 ) << x << std::endl;
std::cout << "x = " << std::hex << reinterpret_cast<uint32_t &>(x) << std::endl;
reinterpret_cast<uint32_t &>(x) |= (uint32_t)0xAA;
std::cout << "x = " << std::setprecision(16) << x << std::endl;
std::cout << "x = " << std::hex << reinterpret_cast<uint32_t &>(x) << std::endl;
Вывод данного фрагмента кода может выглядеть как
x = 123.456787109375
x = 42f6e9e0
x = 123.455078125
x = 42f6e900
x = 123.4563751220703
x = 42f6e9aa
Или то же самое можно сделать, используя указатель. Например
float x = 123.456789;
uint32_t *px = reinterpret_cast<uint32_t *>(&x);
std::cout << "x = " << std::setprecision(16) << x << std::endl;
std::cout << "x = " << std::hex << *px << std::endl;
*px &= ~(uint32_t)0 << 8;
std::cout << "x = " << std::setprecision( 16 ) << x << std::endl;
std::cout << "x = " << std::hex << *px << std::endl;
*px |= (uint32_t)0xAA;
std::cout << "x = " << std::setprecision(16) << x << std::endl;
std::cout << "x = " << std::hex << *px << std::endl;
Вывод на консоль этого фрагмента кода будет таким же, как показано выше.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Изучаю вопрос о грамотном управлении памятьюКак я понял, вызывать метод delete() для каждого виджета необязательно, достаточно при его создании...
Есть база данных с таблицами статистики, 4 идентичных таблицы с разными названиями и иерархией - //категория - подкатегория - проект - таблица...