这行代码是什么意思?

3
我想知道这行代码的含义是什么?
b = (gen_rand_uniform()>0.5)?1:0;
gren_rand_uniform()是一个生成随机0和1数字的函数。然而,我不理解>0.51:0的含义。
我知道这可能是一个基础问题,请耐心等待。
谢谢!
7个回答

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。我认为这里的括号是不必要的,但如果你喜欢它们,可以加上。


11

这是一种简写。在您提供的示例中,它等同于:

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

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


这不是速记法,也不完全等效 - 实际上它是一个单独的结构。当使用嵌套的三元表达式并查看它们从左到右还是从右到左进行评估时,最容易看出这一点。当然,有些人可能会说,以任何其他方式行事都必须是“等效”的if / else结构的错误。 - Sean Kinsey
感谢您的输入;我已经对我的答案进行了一定程度的修正。 - Michiel Buddingh
5
那个三元操作符是多余的;该语句的效果等同于 b = (gen_rand_uniform()>0.5); - wilhelmtell

3

这是一种获取随机值的方式,该值为1或0,每次几率各半。"?" 和 ":" 是条件运算符


3

这是四舍五入的操作。变量b将会是0或1。


1

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


0

条件赋值

variable = condition ? value_if_true : value_if_false;

这等同于:

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

你给我们的代码只是随机布尔值,它将返回1或0。


0
你所看到的是一个“三元表达式”。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),实际上可以包含嵌套的三元表达式,只要它评估为非假值即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接