可能的重复:
按位运算的实际应用
我已经编程好几年了,我一直想知道按位运算符的实际应用。
在我的编程经验中,我不必使用按位运算符。它们最常在什么时候使用?在我的编程生涯中,我有必要学习这些吗?谢谢你。友好地,詹姆斯
可能的重复:
按位运算的实际应用
我已经编程好几年了,我一直想知道按位运算符的实际应用。
在我的编程经验中,我不必使用按位运算符。它们最常在什么时候使用?在我的编程生涯中,我有必要学习这些吗?谢谢你。友好地,詹姆斯
我最近不需要它,但是在编码帕斯卡时,只要除数或乘法是 2 的幂,我就用它来乘法或除法。
颜色存储在一个字节中,文本颜色在低 4 位,背景颜色在高 4 位。
使用 c << 4 代替 if c * 16 和 c >> 4 代替 c / 16 来保存或检索背景要快很多倍。
出于某种原因,使用 c <<4 >> 4 检索 textcolor 也比 c & 15 (bitvize and) 更快。可能注册相关;)但那是我头上的方式:D
但除非您正在执行校验和计算、压缩或加密,否则您可能无需这样做。
即使您可以多次将位存储在 int 中,驱动程序也可以以任何方式为您优化事物,并且在 c# 中,您可以使用 Flag 枚举自动将位标志打包成字节、字或整数值。
所以我猜想,既然你还没有找到用途,你可能没有在他们有意义的领域工作。
位运算经常在硬件附近使用——在打包数据、进行压缩或将多个布尔值打包成一个字节时。按位运算直接映射到处理器指令,并且通常非常快。
如果您正在使用 I/O 或设备接口,则按位操作变得非常必要 - 将位域的各个部分分离为重要数据。
或者您可以将其用作快速乘以二。:)
二进制和位旋转的另一个有趣用法。
将摩尔斯电码打包成一个字节。A.
是0
,a-
是 1。
A = .-
A = 00000001xB
// Add a 'start bit'
A = 00000101xB
将位移动 8 次左右,找到起始位后开始播放声音。
+------- Monitor this position
V
A = 00000101 // Starting off
A = 00001010 // Nothing yet
A = 00010100 // Still nothing
A = 00101000 // WOw, a lot of nothing
A = 01010000 // Our boring life, we do nothing
A = 10100000 // Wow! A start bit! Prep to play sound.
A = 01000000 // Play a short
A = 10000000 // And play a long.