Есть много способов сделать это, мой любимый:
a + rand() % 2 * (b - a);
, но это не ясно что он делает, и это не способствует эффективность либо (хорошо, если вы превратили бы ее в макро / встроенную функцию и никогда не использовали бы с переменными, современные компиляторы должны оценивать числа во время компиляции), поэтому самый элегантный способ сделать это - использовать некоторые Тип условия, вот пример с троичным оператором:
(rand() % 2)? a: b;
Кстати: есть много способов выбора между 0/1, я использовал rand ()% 2, потому что это наиболее используемая техника, но если вы случилось так, что для архитектуры 6502, где нет модуля / деления, вы можете сделать это с помощью побитового оператора, например rand () & ANY_POWER_OF_TWO или вот так rand ()> HALF_MAX_RAND