这行代码是什么意思?
我想知道这行代码是什么意思?
b = (gen_rand_uniform()>0.5)?1:0;
gren_rand_uniform()
是生成随机0和1数字的函数。 但是我没有得到>0.5
和1:0
的含义。
我知道这应该是一个基本问题,请耐心等待。
谢谢!
这是速记。 在您给出的示例中,它相当于:
if (gen_rand_uniform() > 0.5) { b = 1; } else { b = 0; }
由于gen_rand_uniform()
可能生成1
到0
之间均匀分布的随机数,因此该值高于0.5的可能性为50%。 这意味着获得1
或0
几率为50%
我不认为get_rand_uniform()
会做你认为它做的事情。 它可能看起来像这样:
float get_rand_uniform(void);
或者也许double
。 关键是,它返回0到1 之间的随机十进制数。所以这个:
get_rand_uniform() > 0.5
是检查该数字是否接近1或0.并且:
x ? y : z
是三元条件运算符,它具有与此相同的function:
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或0,每50%的时间。 “?” 和“:”是条件操作员 。
这是四舍五入。 b变量将为0或1。
它编码了硬币的翻转。 (一个完美平衡的硬币。)
条件转让 :
variable = condition ? value_if_true : value_if_false;
这相当于:
if (condition) { variable = value_if_true; } else { variable = value_if_false; }
你给我们的代码只是随机的bool。 它将返回1或0。
你在这里看到的是一个ternary expression
。 http://en.wikipedia.org/wiki/Ternary_operation这是(正如其他人已经指出的那样)一个条件构造,但是一个特定于表达式的构造,意味着返回一个值。
这种结构存在于大多数语言中(但不存在于例如VB.Net中)并且具有以下forms
condition ? valueiftrue: valueiffalse
这个实例的一个例子是:
var foo = true; var bar = foo ? 'foo is true' : 'foo is false'; // bar = 'foo is true'
另请注意,条件可以是任何表达式(例如,在您的情况下gen_rand_uniform() > 0.5
)并且gen_rand_uniform() > 0.5
可以包含嵌套的三元表达式,它所要做的就是将其计算为非假值。