c/c++语言开发共享C中的快速乘法代码

我正在研究乘法源代码,我不理解这个乘以x*A函数。 请帮我用任何数字例子来理解这个吗?

 #define BITS_PER_LONG (8 * sizeof (unsigned long)) typedef struct matrix{ int rown;//number of rows. int coln;//number of columns. int rwdcnt;//number of words in a row int alloc_size;//number of allocated bytes unsigned long *elem;//row index. }*binmat_t; void mat_vec_mul(unsigned long *cR, unsigned char *x, binmat_t A) { int i,j; unsigned long *pt; memset(cR, 0, A->rwdcnt*sizeof(long)); pt = A->elem; for(i=0; irown; i++) { if ((x[i/8] >> (i%8)) & 1) for (j = 0; j rwdcnt; ++j) cR[j] ^= *pt++; else pt += A->rwdcnt; } } 

    x是位向量,它存储在char数组中。 x中的位数是A-> rown。 表达式(x[i/8] >> (i%8)) & 1选择x的 i位。

    A是无符号长的二维数组,具有A-> rown行和A-> rwdcnt列。

    cR是带有A-> rwdcnt元素的无符号长矢量。 进入此程序后,cR将被清除。

    if语句确定x中的 i位是否打开。 如果该位接通,则A的 i列被“添加”到cR。 如果该位关闭,则else子句跳过此A列。由于一个位只能有1或0的值,因此if-else等效于将A的列乘以该位并将产品添加到cR。

    “添加”由XOR完成。 这里的解释尚不清楚。 可能每个cR是单个比特arrays(和A的每一列),或者可能是cR(和A中)中的每个无符号长表示模2的整数上的多项式。 (这是密码学中的常见类型。)

    我怀疑cR是一个单位数组,而A-> rwdcnt = A-> coln / BITS_PER_LONG。

    实际上,这是模2的整数的标准数组乘法。

      以上就是c/c++开发分享C中的快速乘法代码相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549643.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐