Обновить
0

HighLoad Backend Developer

Отправить сообщение

для тех, кто не знает, как представляются числа в дополнительном коде.
да нет, для всех колдунство. Вместо простого прочтения кода дальше, особенно если первый раз его видишь, тут надо напрячься и сообразить что же этим хотели сказать. В прицнипе, если оставить хороший комментарий, то это может нивелировать этот недостаток :)

Кстати, для того, чтобы избегать ветвления, вовсе не обязательно избегать операторов сравнения. Надо просто не размещать их в конструкциях ветвления.

На мой взгляд, вот такой код - это же колдунство какое то:

int t = (data[j] - 128) >> 31; // 0 если >= 128, -1 если < 128
sum += ~t & data[j];

тот же эффект будет, если написать:

sum += static_cast< int >(data[j] >= 128) * data[j];

или вообще просто и понятно:

sum += (data[j] >= 128) ? data[j] : 0;

  • тут даже беглого взгляда достаточно для того чтобы понять, что делает код.

Информация

В рейтинге
Не участвует
Откуда
Bucuresti, Bucuresti, Румыния
Дата рождения
Зарегистрирован
Активность