使用>>运营商超过/运营商的优势是什么?它在我所维护的代码中被广泛使用。 对于例如 int width = previousWidth >> 2;
>>运营商超过/运营商的优势
回答
当您想要将某个值移位一定数量的位时,理解起来会相当简单。例如:
byte[] bits = new byte[4];
bits[0] = (byte) (value >> 24);
bits[1] = (byte) (value >> 16);
bits[2] = (byte) (value >> 8);
bits[3] = (byte) (value >> 0);
这显然是由不同数量的位移位。你会真的想要在分裂方面表示呢?
现在当然,当你真正想要的是除法时,为了可读性的缘故,你应该使用除法运算符。有些人为了性能可能会使用偏移,但是一如既往,对于大多数代码而言,可读性比微优化更重要。所以你的情况,如果有什么实际上期望的是width
是previousWidth
除以4,代码应该*绝对反映:
int width = previousWidth/4;
我只用bitshifting这个证明的性能差异后意义重大。
它们是不同的操作:
>> 2
移位的位模式的两个位到右侧(基本上分割的整数由2^2 = 4)。/ 2
将数字除以2(可以实现为>> 1
)。
请注意,使用>> 1
将其他数字类型除以2可能会给出意想不到的结果。
如果您的意思是“除以二”,请键入“/ 2”。阅读你的代码的人(包括你,在一段时间之后)会感谢你没有模糊意思。
我敢打赌,他的意思是'1'。 – 2013-02-13 08:19:49
@ Eng.Fouad:我敢打赌他的意思是'/ 2';) – Johnsyweb 2013-02-13 08:24:15
你是对的!我添加了这个代码片段,仅仅为 – Abichellam 2013-02-13 08:31:46
最有可能什么也没有。这将是一个JVM优化,将一个分区转变为bitshift。
如果它正在做一个位掩码,那么很好,但是如果在上面的情况下,它似乎是写一个数学运算的一种尴尬的方式,然后考虑将它作为维护的一部分进行更改(或者只是将它接受为不好的主意,但保持独立)。
nup ..这不会发生!..为自己测试它 – Anirudha 2013-02-13 08:33:40
正如其他人已经说过,我建议你总是青睐在优化更具可读性选项,除非你
- 肯定需要最优化
- 知道它的工作原理是
- 知道你的编译器
- 知道你的JVM
- 把性能测量到位
- 考虑统计评估这些测量(极值,方差,第一次和以后的测量,......)
- 1. 超载运营商 - >
- 2. Angular2 =>运营商
- 3. PHP - >运营商
- 4. javascript“=>”运营商
- 5. C++流和运营商>>优先
- 6. 转换运营商和运营商>>
- 7. 的JavaScript =>运营商
- 8. 使用运营商的 - > *
- 9. 运营商'。' VS ' - >' 在C++
- 10. 运营商优先?
- 11. 运营商优先
- 12. 运营商超载
- 13. 超载运营商=
- 14. 不匹配运营商>>问题
- 15. cygwin不承认>>运营商? C++
- 16. 超载运营商新,没有超载运营商删除
- 17. 运营商的ambigious过载>>'在'getfile >>点'
- 18. 空 - 结合运营商和运营商&&
- 19. 或运营商与三元运营商
- 20. 超载“的”运营商
- 21. C++的朋友功能 - 运营商超载istream >>
- 22. 的=的名称>运营商在C#
- 23. Haskell's Parsec的问题<|>运营商
- 24. F#:的string.join和|>运营商
- 25. 的Javascript>运营商扩展
- 26. 暧昧使用运营商的 '>'
- 27. D运营商超载
- 28. 运营商<<超载
- 29. 超载运营商<<
- 30. 运营商+超载问题
除非另有说明,否则认为是优化。但也见http://stackoverflow.com/questions/1168451/is-shifting-bits-faster-than-multiplying-and-dividing-in-java-net – 2013-02-13 08:20:20
一个世纪以前的时间,这真的做了一个区别。今天,这可能意味着编写这段代码的人要么是编程老手,要么从旧书中学习,要么试图混淆你...... ;-) – Axel 2013-02-13 08:44:26