谁能告诉我如何从C中的32位无符号整数中提取'n'特定位.
例如,假设我想要32位值的前17位; 我应该做什么?
我认为我应该使用模数运算符,我尝试了它,并能够得到最后8位和最后16位
unsigned last8bitsvalue=(32 bit integer) % 16
unsigned last16bitsvalue=(32 bit integer) % 32
Run Code Online (Sandbox Code Playgroud)
它是否正确?有没有更好,更有效的方法来做到这一点?
我需要优化一些代码,其中我将一个int(32位)的向量乘以标量模p(其中p是素数(2 ^ 32)-5),然后从另一个向量模p中减去该向量.
代码如下所示:
public static void multiplyAndSubtract(long fragmentCoefficient, long[] equationToSubtractFrom, long[] equationToSubtract) {
for (int i = 0; i < equationToSubtractFrom.length; i++) {
equationToSubtractFrom[i] = modP(equationToSubtractFrom[i] - multiplyModP(fragmentCoefficient, equationToSubtract[i]));
}
}
Run Code Online (Sandbox Code Playgroud)
我使用longs因为Java不支持无符号整数但两个向量都是mod p所以你可以期望每个数字都是0 <= x <(2 ^ 32)-5
有什么想法来优化这个?mod p操作占用了大部分执行时间,因此优化这种方法的一种方法可能是在乘法后不知道怎么做modP并且只在减法后做.有关如何做到这一点的任何想法?
IDEA密码使用乘法模数2^16 + 1.是否有算法在没有通用模运算符的情况下执行此操作(仅模数2^16(截断))?在IDEA的上下文中,零被解释为2^16(它表示零不是我们乘法的参数,它不能是结果,因此我们可以保存一位并将值存储2^16为位模式0000000000000000).我想知道如何在不使用标准模运算符的情况下有效地实现它(或者是否有可能).
c ×2
algebra ×1
cryptography ×1
java ×1
modulo ×1
modulus ×1
optimization ×1
performance ×1
primes ×1