Не думаю, что 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 }
Кроме того, что тройной оперы tor - выражение . Так что все это:
get_rand_uniform() > 0.5 ? 1 : 0
в основном округляя случайное число с плавающей запятой в 1 или 0, а это:
b = get_rand_uniform() > 0.5 ? 1 : 0;
Правопреемникам, которые случайным образом выбраны 1 или 0 в b
. Я считаю, что скобки здесь не нужны, но если они вам нравятся, пойдите для этого.
благодарит за ответ! Это прояснилось для меня. – 2009-10-14 19:44:33
Его не стенография, а ее не совсем эквивалентная - это фактически отдельная конструкция. Это наиболее легко увидеть при использовании вложенных тернарных выражений, а также в том, в каком порядке они оцениваются, слева направо или наоборот. Конечно, некоторые могут сказать, что поведение в любом другом виде, чем в случае «эквивалентного», если/else contstruct должно быть ошибкой. –
Спасибо за ваш вклад; Я несколько квалифицировал свой ответ. –