Should I bit-shift to divide by 2 in Java? [duplicate]

£可爱£侵袭症+ 提交于 2019-11-28 22:43:09

Unless you're working in a shop and a codebase where bit-shifting is common then, IMHO, you're risking obfuscation. Yes, the expressions may be logically equivalent but:

  • A n00b might get confused by the alternate syntax
  • An old guy who hasn't had to do any bit-shifting since college, like myself, might get confused
  • If you bit shift and feel the need to comment on what you just did then you're definitely off. Simple division is self-documenting and would be clear to anyone who's familiar with elementary math
  • You're not going to outsmart a compiler for optimization on something that simple so don't bother trying
  • As good coding practice it's better to make your code simple/vanilla rather than clever(er)

All this is relative and, again, really depends on your shop's standards. If your colleagues love to bit-shift, then by all means go forth and bit-shift.

Modern compilers are clever enough to generate the fastest code for divisions by two. They'll do a shift if it is faster. If what you want to achieve is a division by 2, using a division will make your code clearer. And you'll avoid problems when the number to be divided is negative.

Yes, this is the very first thing that anyone attempting to do compiler optimizations will do (and has done for at least 5 decades), it most certainly is done by the Java JIT compiler, and you'd probably have a very hard time finding any compiler that doesn't do it.

And even if they didn't, it would still be a premature micro-optimization that should be avoided in favor of having the code be clearer.

The division routine for your CPU will handle this. There is no need for you to do it.

This is known as a premature optimization.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!