Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Разобрать цело число на разряды по переменным


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

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

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

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

Код

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


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

Автор: borisbn 20.6.2011, 11:37
Код

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 );


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

нет 

Автор: 500mhz 20.6.2011, 19:55
многа букф )))

Код

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


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

Автор: borisbn 20.6.2011, 20:26
> BCD арифметика
BDSM IMHO smile
sorry za my инглиш

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)