使用位移位操作将两个变量相乘
Multiplying two variables using bit shift operation
我有两个变量(它们实际上是两个不同矩阵的元素)。例如,我想要乘以
a[i][k]*b[k][j]
使用位操作,我该怎么做呢?
我看到引用乘法常数,而不是像3*2,3*4,3*8这样的变量。但是我如何把同样的技巧应用到变量相乘上呢?如果有这样的帖子,你能给我指出来吗?谢谢!
给定两个积分变量
unsigned X, Y;
对于Commodore 64, Apple][或其他没有自己乘法指令的架构,这将相乘。
unsigned answer = 0;
while ( X )
{
answer <<= 1;
if ( X & 1 )
answer += Y;
X >>= 1;
}
位移乘法仅在乘以2的幂(2,4,8,16等)时可用。乘法运算将被简化为单位移位运算:
x1 = 2^n;
result = x2 << n; // This is the same as x2 * x1
对于任意情况,最有效的方法是使用普通乘法:
a[i][k]*b[k][j]
如果您要乘巨大的矩阵,重要的是具有良好缓存行为的高效算法。对于c++,请查看Eigen库。在现代CPU上,你不能对两个变量的乘法进行微优化。
相关文章:
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 命令行参数,cant 或两个变量
- 在 for 循环中更新两个变量时遇到问题C++
- C++ 编译时在两个变量之间交替
- C++ 如何在包含两个变量的结构中存储与变量不同数量的值?
- 为什么一个接一个声明的两个变量在内存中不相邻?
- 为什么动态分配的两个变量的内存位置不是连续的?
- 是否可以在C++中使用宏交换两个变量的出现?
- 计算机如何分配两个变量,我们如何计算两个变量之间的距离?
- 正确证明C 中的两个变量合理(我想将它们视为一个变量)
- 可视C 编译器将相同的存储位置提供给两个变量
- 尝试使用 {} 和 std::make_pair() 交换两个变量时的行为不同
- 在rootframework中的根文件中编写两个变量
- 最短路径,带有两个变量
- 加入两个变量和LCD打印
- 在循环中声明两个变量以逆转字符串?在C 中
- 具有两个变量的"for"循环,一个变量每次迭代递增,每隔一次迭代递增
- 如何在C++中使用一个类中两个变量的值
- 仅在C 中的一个变量上,两个变量函数的数值集成(使用数值配方库)
- 如何在我存储的两个变量之间生成随机数