我有一个长整数(即10001000110 ...)和一个带双值的数组(即{.5,.76,.34,...}),我想遍历整数的二进制表示并乘以每个数字及其在我的数组中的对应位置,并将它们加在一起(矩阵乘法):

就像:1 * .5 + 0 * .76 + 0 * .34 .....

用C做这件事的最佳方法是什么?

谢谢

===============>>#1 票数:5 已采纳

像这样吗

int n = n_doubles;
double result = 0.0;

while (n--) {
    if ((long_integer>>n)%2)
        result += doubles[n_doubles - n];
}

===============>>#2 票数:1

编辑:问题尚不清楚,但是从作者的最新评论看来,这似乎是关于获取整数的位表示形式。

首先,您必须使用位掩码来获取整数的按位表示:

uint32_t theLongInt = <?>;
uint32_t mask = 0x00000001;

// bitwise representation of the integer theLongInt
uint8_t bits[30];

for(int i = 0; i < 30; i++) {
    if ( (theLongInt & mask) == 1)
        bits[i] = 1;
    else
        bits[i] = 0;
    mask = mask << 1;
}

比您可以循环执行相加和相乘。

为了提高效率,请不要存储整数的按位表示,而是在单个for循环内进行操作。

===============>>#3 票数:1

与buddhabrot的答案类似,这更公然地将位和数组元素对齐,但将LSB与index[0]对齐:

double result = 0.0;

for(int x=0; x<n_doubles; x++){
    if(long_integer & (1<<x))
          result += doubles[x];
}

  ask by bdeonovic translate from so

未解决问题?本站智能推荐:

1回复

当我尝试将两个矩阵的元素相乘时,无效的二进制操作数

在一个方法中,我有一个m * n矩阵和一个数组(分配为m * 1矩阵),不幸的是,在编译过程中出现此错误: 该方法的完整代码是这样 matrixA和listB都使用相同的分配方法。 为什么会出现这个错误? 我该如何解决?
1回复

输出和输入二进制数据C

我正在尝试输出和输入二维数组为二进制。 我的二维数组包含在以下结构中 并且我创建了以下函数来输出整个结构 和下面的功能来输入结构 我已经检查过使用printf函数正确输入和输出了mat->rows和mat->columns ,但是当到达该行时 在
2回复

二进制矩阵向量乘法

我想将8x8 二进制矩阵乘以由无符号字符表示的8位向量表示为无符号64位整数。 但是,由于一些其他问题,矩阵必须按列排序,因此不容易匹配字节以便于乘法。 知道如何加快这样的计算吗? 每项操作都是重要的,我需要进行数十亿次这样的计算。 乘法是在2元素场(F-2)上进行的。
2回复

将2D数组(矩阵)保存到C函数内部的二进制文件中

我基本上是想在函数中将大型2D数组(矩阵)保存为二进制文件。 像现在一样(请参见下面的第一个玩具代码),矩阵将转换为指向每一行(?)中第一个元素的指针。 函数saveToFile内部的警告fwrite强调了这saveToFile : 数组函数参数的大小将返回"int(*)[4]"大
1回复

二进制文件中写入的字符矩阵

我有一个文本文件,可从中读取单词。 在那之后,我必须在每个单词中写一个二进制文件,并在它附近显示行和列。 在_strdup(p),我的程序崩溃了。 有人知道为什么吗? 多谢您的协助。 这是代码:
1回复

有效地转置大(密集)二进制矩阵

我想转置一个二进制矩阵(由零和一组成的矩阵)。 矩阵的每一行都是一列32位整数的1D数组,整个矩阵是一行的一维数组。 这是一个128 x 128二进制矩阵的示例,该矩阵由128行的128 / 32 32位整数组成。 (实际上,该矩阵是一个N x N矩阵,其中N数以万计。) 转置
2回复

错误:无效的二进制操作数*指向矩阵的指针

我收到错误消息:在第13、20、25、31和36行上,无效的二进制*操作数。我不确定如何处理指向矩阵指针的动态内存分配。 同样,如何使用该指针指向的指针以类似矩阵的方式存储整数。 另外,我意识到在指针方面有很多更简单的方法可以解决此问题,但是我不必使用任何括号,并且函数输入已提供给我。
1回复

生成n x n个非同构二进制矩阵的算法

n×n有2 ^(n ^ 2)个可能的二进制矩阵,同构意味着将板的旋转和反射对称操作算作1。 例如,有6个非同构2 X 2矩阵, [0 0] [0 0] [0 0] [0 1] [0 1] [1 1] [0 0] [0 1] [1 1] [1 0] [1 1] [1 1]。
2回复

以列方式从二进制矩阵中获取1的索引

1 1 0 1 0 0 0 1 1 0 1 0 1 0 0 0 1 1 0 0 1 1 0 1 我实现了一个程序,该程序以列的方式查找1的数目的索引。 例如,以上述二进制矩阵为例,应获取的索引为:0 2 0 1 1 3 3 0 3 1 2 2 3。 我的问题是要获得这些
1回复

在C中将矩阵相乘

我试图使用C的循环将几个矩阵相乘。 我在R获得了预期的答案,但在C却没有获得预期的答案。 我怀疑问题与+=函数有关,该函数似乎在循环的第一次迭代后将乘积的值加倍。 我对C不太熟悉,还无法用+=函数替换将返回预期答案的函数。 感谢您的任何建议。 首先,这是返回预期答案的R代码