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


Автор: awesome 30.11.2010, 15:25
имеется 2 char. a char[4] = {115, 115, 115, 115}; b char[4] = {97, 97, 97, 97};
как сложить их по модулю 2 в 32 степени?

Автор: triclosan 30.11.2010, 15:31
a это типа 0x73737373
b = 0x97979797
?

Автор: awesome 30.11.2010, 15:36
нет. a = ssss, b = aaaa;
ASCII коды вообщем.

Автор: triclosan 30.11.2010, 15:42
Цитата(awesome @  30.11.2010,  15:36 Найти цитируемый пост)
ASCII коды вообщем. 


Вопрос в том, что вы подразумеваете под "сложить", я предположил , что каждый последующий элемент массива это разряд числа.

Автор: mes 30.11.2010, 15:49
Вам надо самым простым способом или побитово ?

Добавлено через 39 секунд
и это для 32 битной (или выше) ?



Автор: awesome 30.11.2010, 15:50
Цитата(triclosan @  30.11.2010,  15:42 Найти цитируемый пост)
Вопрос в том, что вы подразумеваете под "сложить"

представить эти массивы в двоичной системе и сложить.
a = 01110011011100110111001101110011
b = 01100001011000010110000101100001

Добавлено через 1 минуту и 39 секунд
Цитата(mes @  30.11.2010,  15:49 Найти цитируемый пост)
Вам надо самым простым способом или побитово ?

главное чтобы получился правильный результат=)

Автор: mes 30.11.2010, 15:53
Цитата(awesome @  30.11.2010,  14:50 Найти цитируемый пост)

представить эти массивы в двоичной системе и сложить.
a = 01110011011100110111001101110011
b = 01100001011000010110000101100001 

т.е. нужно вручную считать..

с или с++ ?


Автор: awesome 30.11.2010, 15:54
с или с++
не обязательно представлять в двоичной системе, это я написал, как я думаю.

Автор: mes 30.11.2010, 16:14
Цитата(awesome @  30.11.2010,  14:54 Найти цитируемый пост)
не обязательно представлять в двоичной системе, это я написал, как я думаю.

Код

   unsigned int res = 0; //  32 битный инт
   for (size_t i=0, j=3; i<32; --j, i+=8)   
     res += (unsigned(a[j]) + unsigned(b[j]))<< i;


Добавлено через 1 минуту и 21 секунду
ну и если надо результат опять сложить в массив c[4], то
Код

   for (size_t i=0, j=3; i<32; --j, i+=8) 
     c[j] = res >> i;

Автор: awesome 30.11.2010, 16:27
mes, спасибо большое!

Автор: LITEOMILL 23.1.2023, 21:47
Модератор: Сообщение скрыто.

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