小心位操作
2004-12-02 09:11
309 查看
在程序中,有时为了提高效率,可能会在很多地方用到位操作,特别是在一些频繁的运算中。
比如:
假设整数x是2的n次方,(n为非负整数)。y为另一正整数。
则 y/x 等于y>>n, y*x可 等于y<<n, y%x 等于y&(x-1)。
这样这种特殊的乘法,除法,求余运算便被位操作代替了,提高了效率。
但是我们在用的时候也要多加小心。让我们再看下面一个例子:
当y是负数的时候,情况就有了一些变化。
(-16)/4等于-4; (-16)>>2也等于-4。但是(-17)/4等于-4, (-17)>>2就不等于-4了,而是-5. 所以在对负数进行位操作时,要多加小心,以免出现意想不到的错误。
位操作时还有格外小心符号优先级的问题:在看一个例子:
(16>>2 - 2) 和((16>>2)-2)的区别:前者等于(16>>(2-2))=16,后者等于2.所以我建议在使用位操作时,都用括号括起来。 :)
<信手涂鸦,如有差错,请指正>
比如:
假设整数x是2的n次方,(n为非负整数)。y为另一正整数。
则 y/x 等于y>>n, y*x可 等于y<<n, y%x 等于y&(x-1)。
这样这种特殊的乘法,除法,求余运算便被位操作代替了,提高了效率。
但是我们在用的时候也要多加小心。让我们再看下面一个例子:
当y是负数的时候,情况就有了一些变化。
(-16)/4等于-4; (-16)>>2也等于-4。但是(-17)/4等于-4, (-17)>>2就不等于-4了,而是-5. 所以在对负数进行位操作时,要多加小心,以免出现意想不到的错误。
位操作时还有格外小心符号优先级的问题:在看一个例子:
(16>>2 - 2) 和((16>>2)-2)的区别:前者等于(16>>(2-2))=16,后者等于2.所以我建议在使用位操作时,都用括号括起来。 :)
<信手涂鸦,如有差错,请指正>
相关文章推荐
- ASP.NET 学习历程
- [转帖]常用SQL说明
- 常见网络协议端口详解及部分攻击策略(tetra の网志)
- 一个实现FTP断点续传的类
- 还不能休息
- 如何显示在线人数和所在位置
- Ado的特殊使用方法
- 被入侵后的记录
- 《半条命2》低端显卡优化设置
- 测试驱动开发中的陷阱
- 半条命2 问题
- ASP中正则表达式的应用
- 西门子:创建全球知识共享系统【ZZ】
- Top 10 Things to Be Thankful for in .NET
- 新版包含ie引擎的Netscapes浏览器提供下载测试
- 魔
- 神仙
- 一首好听的音乐推荐给大家.《Scarborough Fair》.
- 定制SPS实战记录 系列之一
- MD5算法