Подтвердить что ты не робот

Должен ли я смещать бит для разделения на 2 на Java?

Возможные дубликаты:
Является ли смещение бит быстрее, чем умножение и деление на Java?.NET?
Быстрый вопрос по оптимизации Java

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

4b9b3361

Ответ 1

Если вы не работаете в магазине и кодовой базе, где часто происходит смещение бит, IMHO, вы рискуете запутыванием. Да, выражения могут быть логически эквивалентными, но:

  • n00b может запутаться в альтернативном синтаксисе
  • Старый парень, которому не пришлось делать каких-либо изменений, так как колледж, как и я, может запутаться.
  • Если вы немного перепутаете и почувствуете необходимость комментировать то, что вы только что сделали, тогда вы обязательно отключитесь. Простое разделение самодокументируется и будет понятным для всех, кто знаком с элементарной математикой.
  • Вы не собираетесь перехитрить компилятор для оптимизации на что-то простое, поэтому не беспокойтесь, попробуйте
  • Как хорошая практика кодирования, лучше сделать ваш код простым/ванильным, а не умным (er)

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

Ответ 2

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

Ответ 3

Да, это самое первое, что любой, кто пытается сделать оптимизацию компилятора, будет делать (и проделал в течение как минимум 5 десятилетий), это, безусловно, выполняется компилятором Java JIT, и у вас, вероятно, будет очень трудно найти какой-либо компилятор, который этого не делает.

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

Ответ 4

Подпрограмма разделения вашего процессора будет обрабатывать это. Вам не нужно это делать.

Это известно как преждевременная оптимизация.