0

可能的重复:
按位运算的实际应用

我已经编程好几年了,我一直想知道按位运算符的实际应用。
在我的编程经验中,我不必使用按位运算符。它们最常在什么时候使用?在我的编程生涯中,我有必要学习这些吗?谢谢你。友好地,詹姆斯

4

3 回答 3

1

我最近不需要它,但是在编码帕斯卡时,只要除数或乘法是 2 的幂,我就用它来乘法或除法。

颜色存储在一个字节中,文本颜色在低 4 位,背景颜色在高 4 位。

使用 c << 4 代替 if c * 16 和 c >> 4 代替 c / 16 来保存或检索背景要快很多倍。

出于某种原因,使用 c <<4 >> 4 检索 textcolor 也比 c & 15 (bitvize and) 更快。可能注册相关;)但那是我头上的方式:D

但除非您正在执行校验和计算、压缩或加密,否则您可能无需这样做。

即使您可以多次将位存储在 int 中,驱动程序也可以以任何方式为您优化事物,并且在 c# 中,您可以使用 Flag 枚举自动将位标志打包成字节、字或整数值。

所以我猜想,既然你还没有找到用途,你可能没有在他们有意义的领域工作。

于 2012-09-20T21:18:41.623 回答
1

位运算经常在硬件附近使用——在打包数据、进行压缩或将多个布尔值打包成一个字节时。按位运算直接映射到处理器指令,并且通常非常快。

如果您正在使用 I/O 或设备接口,则按位操作变得非常必要 - 将位域的各个部分分离为重要数据。

或者您可以将其用作快速乘以二。:)

于 2012-09-20T20:46:40.123 回答
1

二进制和位旋转的另一个有趣用法。

将摩尔斯电码打包成一个字节。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.
于 2012-09-20T21:00:37.850 回答