这行代码是什么意思?

时间:2009-10-14 17:57:08

标签: c

我想知道这行代码是什么意思?

b = (gen_rand_uniform()>0.5)?1:0;

gren_rand_uniform()是生成随机0和1数字的函数。但是我没有理解>0.51:0的含义。

我知道这应该是一个基本问题,请耐心等待。

谢谢!

7 个答案:

答案 0 :(得分:12)

我认为get_rand_uniform()不符合你的想法。它可能看起来像这样:

float get_rand_uniform(void);

或者double。关键是,它在 0和1之间返回一个随机的十进制。所以这个:

get_rand_uniform() > 0.5

检查该数字是否接近1或0.并且:

x ? y : z

是三元条件运算符,它具有与此相同的功能:

if(x) { y } else { z }

除了三元运算符是表达式。所以这一切:

get_rand_uniform() > 0.5 ? 1 : 0

基本上将随机浮点数舍入为1或0,并且:

b = get_rand_uniform() > 0.5 ? 1 : 0;

将随机选择的1或0分配给b。我相信这里的括号是不必要的,但如果你喜欢它们,那就去吧。

答案 1 :(得分:11)

这是速记。在您给出的示例中,它等同于:

if (gen_rand_uniform() > 0.5) {
    b = 1;
} else {
    b = 0;
}

由于gen_rand_uniform()可能会在10之间生成均匀分布的随机数,因此该值有50%的可能性高于0.5。这意味着获得10

的可能性为50%

答案 2 :(得分:3)

这是一种获得随机值的方法,该值为1或0,每50%的时间。 “?”和“:”是conditional operarator

答案 3 :(得分:3)

它正在四舍五入。 b变量将为0或1。

答案 4 :(得分:1)

它编码了硬币的翻转。 (一个完美平衡的硬币。)

答案 5 :(得分:0)

Conditional assignment

variable = condition ? value_if_true : value_if_false;

等于:

if (condition) {
    variable = value_if_true;
} else {
    variable = value_if_false;
}

你给我们的代码只是随机的bool。它将返回1或0。

答案 6 :(得分:0)

您在这里看到的是ternary expressionhttp://en.wikipedia.org/wiki/Ternary_operation 这是(正如其他人已经指出的那样)一个条件构造,但是一个特定于表达式的构造,意味着返回一个值。

此构造存在于大多数语言中(但不在例如VB.Net中)并且具有

的形式
condition ? valueiftrue: valueiffalse

这方面的一个例子是:

var foo = true;
var bar = foo ? 'foo is true' : 'foo is false';
// bar = 'foo is true'

另请注意,条件可以是任何表达式(如您的情况gen_rand_uniform() > 0.5),并且可以包含嵌套的三元表达式,它所要做的就是将其计算为非假值。