Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разобрать цело число на разряды по переменным 
:(
    Опции темы
Serbis
Дата 20.6.2011, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 9.12.2007

Репутация: нет
Всего: нет



Объясните пожалуйста некоторый вопрос по поразрядным опрациям. У меня имеются две целочисленные переменные a и b. Необходим собрать число x из этих переменных а пордке ab. Затем произвести итерацию x, и разобрать его обратно на a и b. Например так a = 1; b = 5, собираем x и получаем x=15, затем делаем итерацию - x=16 и разбиваем обратно - a = 1; b = 6;

PM MAIL   Вверх
500mhz
Дата 20.6.2011, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



что то у меня сомнения в правильности задания, 1+5 как ни крути не 15 )))) 
если а=1 и б=5 и это 1 байтовые значения в случае если А lowbyte то получим 261 ))))


--------------------

PM MAIL ICQ   Вверх
Serbis
Дата 20.6.2011, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 9.12.2007

Репутация: нет
Всего: нет



Ладно, поясню что конкретно нужно. У меня есть функция вывода на четырехсегментный индикатор, которая понимает целые числа только поразрядно. Т. е. что бы вывести чило 1234 нужно вызвать ее таким образом func(1, 2, 3, 4). Из этого и вытекает что число 1234 хранится в четрых переменных - a=1; b=2, c=3, d=4, и что бы произвести какое либо действие над этим числом его нужно снало собрать в единую переменную, сделать это действие а затем обратно разобрать на a, b, c, d обратно.
PM MAIL   Вверх
triclosan
Дата 20.6.2011, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 2
Всего: 12



1,5 => 15 не есть атомарная арифметическая операция. Как по мне разряды надо руками проставлять:

Код

//если количество разрядов фиксировано не вижу смысла заморачиваться:
int func(int a, int b, int c, int d)
{
return d+c*10+b*100+a*1000;
}


Добавлено через 2 минуты и 9 секунд
разрядность 10, я правильно понял?

Это сообщение отредактировал(а) triclosan - 20.6.2011, 11:30
PM MAIL   Вверх
borisbn
Дата 20.6.2011, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Код

void split_number( int number, int & n1000, int & n100, int & n10, int & n1 ) {
    n1000 = number / 1000;
    n100 = ( number % 1000 ) / 100;
    n10 = ( number % 100 ) / 10;
    n1 = number % 10;
}

int join_number( int n1000, int n100, int n10, int n1 ) {
    return n1000 * 1000 + n100 * 100 + n10 * 10 + n1;
}

использование
Код

int n1000, n100, n10, n1;
split_number( 1234, n1000, n100, n10, n1 );
int number = join_number( n1000, n100, n10, n1 );


если пишешь в микроконтроллер, то, возможно, у тебя Си, а не Си++. Я не помню есть ли в Си ссылки... Если нет, то ф-ция split_number д.б. такая
Код

void split_number( int number, int * n1000, int * n100, int * n10, int * n1 ) {
    *n1000 = number / 1000;
    *n100 = ( number % 1000 ) / 100;
    *n10 = ( number % 100 ) / 10;
    *n1 = number % 10;
}
// использование
int n1000, n100, n10, n1;
split_number( 1234, &n1000, &n100, &n10, &n1 );



Это сообщение отредактировал(а) borisbn - 20.6.2011, 11:47


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
triclosan
Дата 20.6.2011, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 2
Всего: 12



Цитата(borisbn @  20.6.2011,  11:37 Найти цитируемый пост)
Я не помню есть ли в Си ссылки... 

нет 
PM MAIL   Вверх
500mhz
Дата 20.6.2011, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



многа букф )))

Код

        mov al,8
        mov ah,5
        add al,ah   ;складываем , получаем al = 13
        xor ah,ah   
        aaa            ;получаем ah =1 , al = 3        


ну и так далее -> BCD арифметика


--------------------

PM MAIL ICQ   Вверх
borisbn
Дата 20.6.2011, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



> BCD арифметика
BDSM IMHO smile
sorry za my инглиш


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0705 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.