Как выполнить сложение по модулю 2^512? Здравствуйте! Необходимо выполнить операцию сложения по модулю 2^512 для алгоритма хэширования "Стирибог", описываемого стандартом ГОСТ 34.11-2012. Складываются два 512-битных числа. Я изучил найденные примеры реализаций этой операции, однако все они используют побитовый сдвиг, которого нет в используемом языке. Например, на JavaScript это выглядит так:/* https://github.com/rudonick/crypto/blob/670cef467fc4ed19896baee6044710779a0843fb/gostR3411.js#L184 */ function add512(x, y) { var CF = 0, w0, w1; for (var i = 0; i >> 16) + (y[i] >>> 16) + (w0 >>> 16); x[i] = (w0 & 0xffff) | (w1 >> 16); } } Или на C:/* https://github.com/okazymyrov/stribog/blob/master/C/standard/stribog.c */ void AddModulo512(const unsigned char *a,const unsigned char *b,unsigned char *c) { int i = 0, t = 0; for(i=63;i>=0;i--) { t = a[i] + b[i] + (t >> 8); c[i] = t & 0xFF; } } Вопрос:Есть ли способ выполнить такое сложение без операции побитового сдвига? Может быть, есть способ выразить побитовый сдвиг через другие операции?