Задать вопрос
@A_Htke

Как найти полусумму 32-битных знаковых чисел?

Во входном файле дано восемь байт, которые задают два 32-битных знаковых целых числа: в первых четырёх байтах записано число A, а в последних четырёх — число B. Нужно вычислить полусумму этих чисел, округляя полученный результат вниз. Полученную полусумму вывести в выходной файл как 32-битное знаковое целое число. Все три числа заданы с порядком байтов little-endian. Внимание: В качестве A и B могут быть даны любые числа из диапазона знаковых 32-битных целых чисел (т.е. от INT_MIN до INT_MAX). Настоятельно рекомендуется протестировать решение на числах, близких к крайним значениям, а также на разных комбинациях чётности чисел. Возможно, будет удобнее использовать 64-битные целые для промежуточных результатов, чтобы избежать переполнения. Весь ввод и вывод в данной задаче бинарный. Ниже показано hex-представление бинарных данных: каждая группа из двух цифр обозначает один байт в файле. Вашей программе на вход будет подан файл с 8 байтами данных, и программа должна создать файл с 4 байтами ответа. Для создания, редактирования и просмотра бинарных файлов используйте какой-нибудь Hex-редактор, например HxD.
с такой трудной задачей сталкиваюсь впервые, так как только начинаю изучение Си. Помогите чем можете, пожалуйста, я в полной растерянности :(
  • Вопрос задан
  • 439 просмотров
Подписаться 1 Средний 3 комментария
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Прочитать бинарно не можете? Есть функция read.

Читайте ей по 4 байта 2 раза в char buf[4].

little-endian означает, что сначала идут самые минимальные байты. Т.е. buf[0] - это младшие 8 бит числа, buf[3] - старшие. Для собирания числа воедино смотрите на операцию сдвига. (int)buf[3] << 24 | (int)buf[2] << 16 поставит на место 2 старших байта (младшие додумайте сами).

Тип 64-х битных чисел - long long. Вам в условии посоветовали им пользоваться.

Сложить 2 числа сами сможете?

Бинарный вывод делается, внезапно функцией write.

Ну, еще входной и выходной файлы, возможно, открыть придется, через функцию fopen.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы