【发布时间】:2015-11-07 01:15:54
【问题描述】:
操纵(清除/设置/切换)MSB 或 LSB 的实际用途是什么?
根据定义,MSB 是最左边的位,贡献最大值,LSB 是最右边的位,贡献最小值。
为什么必须操纵这些位?我们可以通过操纵这些位来实现什么?
【问题讨论】:
标签: bit-manipulation
操纵(清除/设置/切换)MSB 或 LSB 的实际用途是什么?
根据定义,MSB 是最左边的位,贡献最大值,LSB 是最右边的位,贡献最小值。
为什么必须操纵这些位?我们可以通过操纵这些位来实现什么?
【问题讨论】:
标签: bit-manipulation
一个真实世界的例子:
操作 LSB 是 Fenwick Tree
可以用来求nos的总和。 O(log N)
操作 MSB 是二分查找
使用位操作 -- Binary searching via bitmasking?
【讨论】:
如果您使用整数值作为标志结构或包含位域,那么这是一个原因。单独调整 MSB 或 LSB 的一个原因可能是设置一个特殊标志,您知道该位将在其他情况下未被使用,例如在某些 ISA 中,所有内存地址(用于加载/写入)必须在字边界上对齐(通常是字长为 32 位),这意味着指针的最后几位完全无关紧要,可以由应用程序或系统使用,高位也是如此 - 但仅在某些情况下。
其他原因包括对 IEEE-754 数字进行快速算术运算:例如切换比通过 FPU 更快的符号位。
【讨论】:
来自维基百科:
MSB
有符号的幅度表示
这种表示也称为“符号-幅度”或“符号和幅度”表示。在这种方法中,表示数字符号的问题可以是分配一个符号位来表示符号:将该位(通常是最高有效位)设置为 0 用于正数或正零,将其设置为 1 是对于负数或负零。数字中的其余位表示幅度(或绝对值)。因此,在一个只有 7 位(除了符号位)的字节中,大小的范围可以从 0000000(0)到 1111111(127)。因此,一旦添加符号位(第八位),就可以表示从 -12710 到 +12710 的数字。这种表示的结果是有两种表示零的方法,00000000 (0) 和 10000000 (-0)。这样一来,-4310 编码为 8 位字节就是 10101011。
LSB
如果数字变化很小,最低有效位具有快速变化的有用特性。例如,如果将 1(二进制 00000001)与 3(二进制 00000011)相加,则结果将为 4(二进制 00000100)并且三个最低有效位将更改(011 到 100)。相比之下,三个最高有效位 (MSB) 保持不变(000 到 000)。
伪随机数生成器、散列函数和校验和中经常使用最低有效位。
【讨论】: