C, Умножение, Битовая операция или * - PullRequest
2 голосов
/ 25 марта 2011

Мне нужно сделать много операций умножения.Если я рассмотрю эффективность, тогда я должен использовать битовую операцию вместо обычной * операции?Если есть разница, как сделать битовую операцию?Заранее спасибо ..

Ответы [ 4 ]

12 голосов
/ 25 марта 2011

Нет, вы должны использовать оператор умножения и позволить оптимизирующему компилятору решить, как сделать это быстрее всего.

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

3 голосов
/ 25 марта 2011

Приоритет читабельности, а не оптимизация кода, и пусть компилятор сделает это за вас.

Не пытайтесь разобраться с двоичным файлом, потому что:

  • это, вероятно, не будетв любом случае быстрее
  • у вас гораздо больше шансов что-то испортить, если вы не знаете, как на самом деле выполнять битовые операции
2 голосов
/ 25 марта 2011

Нет, по двум причинам:

  1. Ваше оборудование, вероятно, имеет встроенную поддержку умножения. Эта встроенная поддержка, вероятно, будет значительно быстрее, чем все, что вы могли бы реализовать в программном обеспечении. Даже если аппаратная поддержка отсутствует, скорее всего, у компилятора есть заранее определенный алгоритм, который был хорошо продуман и гарантированно работает.
  2. Если вы не очень хорошо разбираетесь в алгоритмах побитовой логики и умножения, вы, скорее всего, совершите ошибку, не говоря уже о большом количестве времени, потраченном на его правильную реализацию.

Есть только несколько ситуаций, когда я мог бы подумать, что вы можете даже начать думать о собственном решении:

  1. Вы реализуете свою собственную схему представления чисел (очень редко, но я видел, как это было сделано, особенно с устаревшим кодом)
  2. Вы реализуете тип данных "большое число". Однако, опять же, это очень трудно сделать хорошо, гораздо лучше найти библиотеку с уже реализованной библиотекой.
  3. Вы делаете простое умножение на 2 ^ n с использованием побитовых сдвигов, хотя это следует использовать экономно (обычно я делаю это только для улучшения читабельности, а не для улучшения скорости)
1 голос
/ 25 марта 2011

битовые операции можно использовать только для умножения числа на степень 2 с помощью оператора << (сдвиг по битам) </p>

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

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