C 如何以随机方式在两个值之间进行选择?

C 如何以随机方式在两个值之间进行选择?,c,random,numbers,C,Random,Numbers,我试图从两个数字中随机选择一个:2或-2。有办法吗?我正在尝试实现一个创建迷宫的算法。您可以使用这个。它使用位操作生成2或-2,而不进行分支: -((rand() & 1) << 2) + 2 你可以用这个。它使用位操作生成2或-2,而不进行分支: -((rand() & 1) << 2) + 2 您可以从C标准库中获得,它返回范围为[0,RAND_MAX]的伪随机整数。您可以使用此函数并从两个数字中选择一个,检查返回的值是否高于或低于RAND_MAX

我试图从两个数字中随机选择一个:
2
-2
。有办法吗?我正在尝试实现一个创建迷宫的算法。

您可以使用这个。它使用位操作生成
2
-2
,而不进行分支:

-((rand() & 1) << 2) + 2

你可以用这个。它使用位操作生成
2
-2
,而不进行分支:

-((rand() & 1) << 2) + 2
您可以从C标准库中获得,它返回范围为[0,
RAND_MAX
]的伪随机整数。您可以使用此函数并从两个数字中选择一个,检查返回的值是否高于或低于
RAND_MAX/2

首先,使用一些种子初始化伪随机数生成器。这样做很常见,因为它每次都返回不同的值

srand(time(NULL));

int rnd = rand();
int result = (rnd > RAND_MAX/2) ? 2 : -2;
或者,您可以使用中建议的
rand()
返回的值的最低有效位,因为返回的值一半是奇数,一半是偶数:

int result = (rnd & 1) ? 2 : -2;
您可以从C标准库中获得,它返回范围为[0,
RAND_MAX
]的伪随机整数。您可以使用此函数并从两个数字中选择一个,检查返回的值是否高于或低于
RAND_MAX/2

首先,使用一些种子初始化伪随机数生成器。这样做很常见,因为它每次都返回不同的值

srand(time(NULL));

int rnd = rand();
int result = (rnd > RAND_MAX/2) ? 2 : -2;
或者,您可以使用中建议的
rand()
返回的值的最低有效位,因为返回的值一半是奇数,一半是偶数:

int result = (rnd & 1) ? 2 : -2;

有很多方法可以做到这一点,我最喜欢的是:

a + rand() % 2 * (b - a);
但是它不清楚它是做什么的,它对效率也没有帮助(如果你想把它变成一个宏/内联函数,并且从不与变量一起使用,现代编译器应该在编译时计算数字),所以最优雅的方法是使用某种条件,以下是三元运算符的示例:

(rand() % 2)? a: b;
顺便说一句:有很多方法可以在0/1之间进行选择,我使用rand()%2,因为它是最常用的技术,
但是,如果您碰巧在6502体系结构中没有模/除,您可以使用如下rand()&任意二次幂或如下rand()>最大值的一半rand(/p>有很多方法可以做到这一点,我最喜欢的是:

a + rand() % 2 * (b - a);
但是它不清楚它是做什么的,它对效率也没有帮助(如果你想把它变成一个宏/内联函数,并且从不与变量一起使用,现代编译器应该在编译时计算数字),所以最优雅的方法是使用某种条件,以下是三元运算符的示例:

(rand() % 2)? a: b;
顺便说一句:有很多方法可以在0/1之间进行选择,我使用rand()%2,因为它是最常用的技术, 但是,如果您碰巧在6502体系结构中没有模/除,您可以使用如下rand()&任意二次幂或如下rand()>最大值的一半rand()这样的按位and运算符执行此操作,这可能会有帮助:这可能会有帮助: