Синтаксис C или двоичный оптимизированный синтаксис? - PullRequest
4 голосов
/ 13 мая 2010

Давайте рассмотрим простой пример двух строк, предположительно делающих одно и то же:

if (значение> = 128 || значение <0) ... </p>

или

if (значение & ~ 127) ...

Скажите: «Если в цикле из тысяч итераций стоят дорогостоящие вещи, то лучше придерживаться традиционного синтаксиса C или, если это возможно, лучше найти двоично-оптимизированный?»

Ответы [ 4 ]

3 голосов
/ 13 мая 2010

В 99 случаях из 100, сделайте тот, который более читабелен и лучше выражает ваши намерения.

3 голосов
/ 13 мая 2010

Я бы использовал первое утверждение с традиционным синтаксисом, так как оно более читабельно. Со вторым утверждением можно сломать глаза.

Забота о программистах, которые будут использовать код после вас.

1 голос
/ 13 мая 2010

Зависит от того, как / где находится проверка. Если проверка выполняется один раз во время запуска программы для проверки параметра командной строки, то проблема с производительностью совершенно спорная, и вам следует использовать все более естественное.

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

1 голос
/ 13 мая 2010

Теоретически, компиляторы выполнят такую ​​оптимизацию за вас. На практике они не могут. Этот конкретный пример немного неуловим, потому что оба не эквивалентны, если только вы не сделаете некоторые предположения о value и о том, является ли знаковая арифметика дополнением 2 на вашей целевой платформе.

Используйте то, что вы найдете более читабельным. Если и когда у вас есть доказательства того, что выполнение этого конкретного теста является критическим, используйте все, что дает вам наилучшую производительность. Лично я бы наверное написал:

if ((unsigned int)value >= 96U)

потому что это более интуитивно для меня, и с большей вероятностью хорошо справится с большинством компиляторов, с которыми я работал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...