我想知道这行代码是什么意思?
b = (gen_rand_uniform()>0.5)?1:0;
gren_rand_uniform()
是生成随机0和1数字的函数。但是我没有理解>0.5
和1:0
的含义。
我知道这应该是一个基本问题,请耐心等待。
谢谢!
答案 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()
可能会在1
和0
之间生成均匀分布的随机数,因此该值有50%的可能性高于0.5。这意味着获得1
或0
答案 2 :(得分:3)
这是一种获得随机值的方法,该值为1或0,每50%的时间。 “?”和“:”是conditional operarator。
答案 3 :(得分:3)
它正在四舍五入。 b变量将为0或1。
答案 4 :(得分:1)
答案 5 :(得分:0)
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 expression
。 http://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
),并且可以包含嵌套的三元表达式,它所要做的就是将其计算为非假值。