我有一个长整数(即10001000110 ...)和一个带有双值的数组(即{。5,.76,.34,...}),我想循环遍历我的二进制表示整数并将每个数字与我的数组中相应的位置相乘并将它们全部加在一起(矩阵乘法):
如此:1 * .5 + 0 * .76 + 0 * .34 .....
在C中最好的方法是什么?
由于
答案 0 :(得分:5)
这样的东西?
int n = n_doubles;
double result = 0.0;
while (n--) {
if ((long_integer>>n)%2)
result += doubles[n_doubles - n];
}
答案 1 :(得分: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循环中执行操作。
答案 2 :(得分: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];
}