相关疑难解决方法(0)

如何在C中创建最小有效位设置为1的掩码

有人可以向我解释这个功能吗?

具有最低有效n位的掩码设置为1.

例如:

n = 6 - > 0x2F,n = 17 - > 0x1FFFF //我根本得不到这些,尤其是n = 6 - > 0x2F

还有什么是面具?

c bit-manipulation bitmask

12
推荐指数
3
解决办法
3万
查看次数

C中线性同余生成器的快速模乘法模数

我正在尝试用Mersenne prime(2 31 -1)作为模数来实现随机数生成器.以下工作代码基于几个相关的帖子:

  1. 如何在C中提取32位无符号整数的特定"n"位?
  2. 快速乘法和减法模数为素数
  3. 快速乘法模2 ^ 16 + 1

然而,

它不起作用uint32_t hi, lo;,这意味着我不理解问题的签名与未签名方面.

基于上面的#2,我期待答案是(hi + lo).这意味着,我不明白为什么需要以下声明.

   if (x1 > r)
        x1 += r + 2; 
Run Code Online (Sandbox Code Playgroud)
  • 有人可以澄清我的困惑的来源吗?

  • 代码本身可以改进吗?

  • 发电机应该避免0或2 31 -1作为种子吗?

  • 如何为一个素数(2 p -k)改变代码?

原始代码

#include <inttypes.h>
// x1 = a*x0 (mod 2^31-1)
int32_t lgc_m(int32_t a, int32_t x)
{
    printf("x %"PRId32"\n", x);
    if (x == 2147483647){
    printf("x1 %"PRId64"\n", 0); 
        return (0);
    }
    uint64_t  c, r = 1;
    c = (uint64_t)a * (uint64_t)x;
    if (c < 2147483647){
        printf("x1 …
Run Code Online (Sandbox Code Playgroud)

c random primes modular-arithmetic

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

ARM位字段提取?

有人可以解释这个指令的作用并将其翻译成C吗?

ubfx.w          r3, r11, #0xE, #1
Run Code Online (Sandbox Code Playgroud)

根据ARM参考手册,它执行"有符号和无符号位字段提取 ",但我对所有这些按位的东西都不好.

arm bit-manipulation

3
推荐指数
1
解决办法
4540
查看次数

标签 统计

bit-manipulation ×2

c ×2

arm ×1

bitmask ×1

modular-arithmetic ×1

primes ×1

random ×1