【发布时间】:2021-07-12 02:51:38
【问题描述】:
我知道在 C 中,要生成一个随机数,我们使用 rand(); 我的计划是 (i) 生成一个 32 位二进制随机数, (ii) 从中提取一些特定位用于特定目的。
我尝试过使用 int rando = rand() 但这至少显示了十进制表示。这对我来说很好,但我需要从中提取某些位。我试过类似的东西:
unsigned long init32;
init32 = ((double)rand()/RAND_MAX)*0b11111111111111111111111111111111111111; printf(" The number is %lu", init32);
打印出来时没有给我二进制表示。 就像我说的,我需要提取一些特定的位。例如,
我应该如何为此目的生成 32 位二进制数,然后为页表存储 10 位?
我希望我已经足够清楚了。这是一个研究项目。
【问题讨论】:
-
int由 N 位组成。您可以将这些位显示为十进制、十六进制或二进制,但它们都是相同的位。你是如何打印号码的?这似乎是你的问题。 -
@RetiredNinja 我只是打印出一个无符号长。在问题中更新。我明白你在说什么,但我的问题是,我该如何提取和存储一定数量的位,例如页表位?
-
如果你的 rand 函数给你一个介于 0 和 1 之间的值,那么你需要乘以 MAX_VALUE 得到一个 0 到 (MAX_VALUE -1) 范围内的数字。然后使用 > 或位掩码运算符,如 &、|提取您感兴趣的部分。
-
yourrand & 0xfff将为您提供前 12 位的值(例如位 0-11)。然后(yourrand >> 12) & 0x3ff会得到页表值。您对目录值的 10 位执行相同的操作。
标签: c bit-manipulation memory-address