В связи с этим ответом: qaru.site/info/1/...
В приведенном выше ответе он упомянул, как избежать предсказания ветвления, избегая ветвей.
Пользователь демонстрирует это, заменив:
if (data[c] >= 128)
{
sum += data[c];
}
С
int t = (data[c] - 128) >> 31;
sum += ~t & data[c];
Как эти два эквивалента (для определенного набора данных, а не строго эквивалентного)?
Какие общие способы я могу делать с подобными вещами в подобных ситуациях? Всегда ли это было бы с помощью >>
и ~
?