Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
1 / 1 / 1
Регистрация: 09.02.2009
Сообщений: 31
1

Представление целых чисел массивом байтов

29.07.2009, 17:49. Просмотров 2700. Ответов 10
Метки нет (Все метки)

у меня вот такая задачка:Написать процедуры сложения и вычитания двух целых чисел, каждое из которых представлено массивом байтов. Первый байт массива содержит код знака числа: 0 - ‘+’, 225 - ‘-‘, а остальные байты- значащие двоичные цифры числа. подскажите пожалуйста как представить число массивом байтов?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.07.2009, 17:49
Ответы с готовыми решениями:

Представление целых и вещественных чисел. Основные арифметические и логические операции.
Часть 1. Вычислить площадь эллипса, если известны длины его полуосей. Какие флаги во флаговом...

Условные операторы при работе с массивом целых чисел
Дан массив целых чисел. Выяснить верно ли, что сумма элементов, которые больше 20, превышает 100.

Создать класс для работы с двумерным массивом целых чисел
Добрый день! Вторая (и последующие) лабораторная выглядит так: Что-то писал сам, что-то брал из...

Написать функции для выполнения операций над одномерным массивом целых чисел
Написать функции для выполнения операций над одномерным массивом целых чисел: • определить среднее...

10
Эксперт С++
7171 / 3229 / 77
Регистрация: 17.06.2009
Сообщений: 14,166
29.07.2009, 17:57 2
У тебя задача стоит - сложить и вычесть. Задачи переводить число в массив или массив в число у тебя не стоит
Поэтому - на вход два массива, а на выходе третий массив с результатом.
Только не 225, а 255.

Добавлено через 41 секунду
Еще неплохо размер массива определить константой, чтобы какая-то определенность была.
0
Эксперт JavaЭксперт С++
8360 / 3581 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
29.07.2009, 18:04 3
Цитата Сообщение от grom Посмотреть сообщение
у меня вот такая задачка:Написать процедуры сложения и вычитания двух целых чисел, каждое из которых представлено массивом байтов. Первый байт массива содержит код знака числа: 0 - ‘+’, 225 - ‘-‘, а остальные байты- значащие двоичные цифры числа. подскажите пожалуйста как представить число массивом байтов?
Если я правильно понял(тогда я немного исправлю), то нужно написать операции для +/- для целых чисел представленных массивом бит, а не байт. Самый старший бит(т.е. самый левый) - это знаковый бит 0(+) и 1(а не 255) который означает -. Битовую математику знаеш(сложение и вычитание двоичных кодов)?
0
1 / 1 / 1
Регистрация: 09.02.2009
Сообщений: 31
29.07.2009, 18:16  [ТС] 4
Цитата Сообщение от M128K145 Посмотреть сообщение
Если я правильно понял(тогда я немного исправлю), то нужно написать операции для +/- для целых чисел представленных массивом бит, а не байт. Самый старший бит(т.е. самый левый) - это знаковый бит 0(+) и 1(а не 255) который означает -. Битовую математику знаеш(сложение и вычитание двоичных кодов)?
да вот я тоже думаю что так то понятнее , но я написал задание как оно мне

поставлено в методичке надо будет с преподом обсудить
0
Эксперт С++
7171 / 3229 / 77
Регистрация: 17.06.2009
Сообщений: 14,166
29.07.2009, 20:02 5
C
1
2
#define MAX_BVAL_BYTES 16
unsigned char bval[MAX_BVAL_BYTES];
bval[i] принимает значения от 0 до 255.

Это массив байт или бит ?
Думаю что нужно складывать и вычитать именно такие числа.
0
Эксперт JavaЭксперт С++
8360 / 3581 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
29.07.2009, 21:11 6
В общем попытаюсь сегодня сделать, если время будет...
0
Эксперт С++
7171 / 3229 / 77
Регистрация: 17.06.2009
Сообщений: 14,166
29.07.2009, 21:29 7
А чего там думать - сложение тривиально:
C
1
2
3
4
5
6
7
8
9
10
11
12
#define MAX_BVAL_BYTES 16
 
unsigned char bv0[MAX_BVAL_BYTES], bv1[MAX_BVAL_BYTES], bv2[MAX_BVAL_BYTES];
unsigned char flag;
unsigned int sum;
int i;
 
flag= 0;
for ( i= 0; i<MAX_BVAL_BYTES; i++ ) {
    sum= bv0[i]+bv1[i]+flag;
    bv2[i]= sum&0xFF; flag= (sum>=256) ? 1 : 0;
}
Добавлено через 6 минут 27 секунд
Смена знака тривиально - это инвертирование всех бит, а потом прибавить 1.
C
1
2
3
4
5
6
7
8
9
10
11
12
#define MAX_BVAL_BYTES 16
 
unsigned char bv0[MAX_BVAL_BYTES], bv2[MAX_BVAL_BYTES];
unsigned char flag;
unsigned int sum;
int i;
 
flag= 1;
for ( i= 0; i<MAX_BVAL_BYTES; i++ ) {
    sum= (bv0[i]^0xFF)+flag;
    bv2[i]= sum&0xFF; flag= (sum>=256) ? 1 : 0;
}
Добавлено через 1 минуту 25 секунд
Вычитание разложим так: A-B = A+(-B).
Операцию сложения мы умеем делать.
Операцию смены знака мы тоже умеем делать.
Значит можем сделать и вычитание.
2
Эксперт JavaЭксперт С++
8360 / 3581 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
29.07.2009, 21:48 8
odip, тогда не буду даже пробовать . Я просто паралельно другим делом занят)))
0
Эксперт С++
7171 / 3229 / 77
Регистрация: 17.06.2009
Сообщений: 14,166
29.07.2009, 23:01 9
Хотя вычитание можно сделать напрямую.
Нужно только вместо однобитного флага переноса сделать однобитный флаг заема.
0
1 / 1 / 1
Регистрация: 09.02.2009
Сообщений: 31
29.07.2009, 23:26  [ТС] 10
Спасибо большое за помощь! только мне не совсем понятно вот это
#define MAX_BVAL_BYTES 16
0
Эксперт JavaЭксперт С++
8360 / 3581 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
29.07.2009, 23:39 11
grom, подстановка, по типу
C++
1
const int MAX_BVAL_BYTES = 16;
т.е. везде вместо MAX_BVAL_BYTES будет подставлятся это значение(тип определяется компилятором).
По этому вопросу посмотри Для чего нужен define?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.07.2009, 23:39

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Задан массив K(m) попарно различных целых чисел. Получить все перестановки целых чисел
Помогите пожалуйста с программой. Задан массив K(m) попарно различных целых чисел. Получить все...

Написать шаблоны функций для для вычисления суммы произведений двух соседних чисел для трех целых чисел и в одномерном массиве целых чисел
Написать шаблоны функций для для вычисления суммы произведений двух соседних чисел для трех целых...

Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла.
Задачу нужно решить в Borland C++ 3.11 Дан файл целых чисел. Создать новый файл целых чисел,...

Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла
Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.