相关疑难解决方法(0)

如何在C中提取32位无符号整数的特定"n"位?

谁能告诉我如何从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)

它是否正确?有没有更好,更有效的方法来做到这一点?

c

30
推荐指数
6
解决办法
10万
查看次数

快速乘法和减法模数为素数

我需要优化一些代码,其中我将一个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并且只在减法后做.有关如何做到这一点的任何想法?

java optimization performance primes modulo

9
推荐指数
2
解决办法
2396
查看次数

快速乘法模2 ^ 16 + 1

IDEA密码使用乘法模数2^16 + 1.是否有算法在没有通用模运算符的情况下执行此操作(仅模数2^16(截断))?在IDEA的上下文中,零被解释为2^16(它表示零不是我们乘法的参数,它不能是结果,因此我们可以保存一位并将值存储2^16为位模式0000000000000000).我想知道如何在不使用标准模运算符的情况下有效地实现它(或者是否有可能).

c cryptography algebra modulus

6
推荐指数
1
解决办法
1034
查看次数

标签 统计

c ×2

algebra ×1

cryptography ×1

java ×1

modulo ×1

modulus ×1

optimization ×1

performance ×1

primes ×1