clearing/setting/toggling 最高有效位 (MSB) 或最低有效位 (LSB) 的意义是什么?

What is the Significance of clearing/setting/toggling the Most Significant Bit (MSB) or Least Significant Bit (LSB)?

操纵 (clearing/setting/toggling) MSB 或 LSB 的实际用途是什么?

根据定义,MSB 是最左边的位,贡献了最大值,LSB 是最右边的位,贡献了最小的值。

为什么要操纵这些位?我们可以通过操纵这些位来实现什么?

如果您使用整数值作为标志结构或包含位域,那么这是一个原因。单独调整 MSB 或 LSB 的原因可能是设置一个特殊标志,您知道该位将不会被使用,例如在某些 ISA 中,所有内存地址(对于 loading/writing)必须在字边界上对齐(通常一个字长是 32 位),这意味着指针的最后几位完全无关紧要,可以由应用程序或系统使用,这同样适用于高位 - 但仅在某些情况下。

其他原因包括对 IEEE-754 数字进行快速算术运算:例如切换符号位比通过 FPU 更快。

来自维基百科:
MSB
带符号的幅度表示

这种表示也称为"sign–magnitude"或"sign and magnitude"表示。在这种方法中,表示数字符号的问题可以是分配一个符号位来表示符号:将该位(通常是最高有效位)设置为 0 表示正数或正零,将其设置为 1 表示对于负数或负零。数字中的其余位表示幅度(或绝对值)。因此,在只有七位(符号位除外)的字节中,大小的范围可以从 0000000 (0) 到 1111111 (127)。因此,一旦添加了符号位(第八位),就可以表示从 −12710 到 +12710 的数字。这种表示的结果是有两种方式来表示零,00000000 (0) 和 10000000 (−0)。这样,-4310编码成一个八位字节就是10101011。

LSB
如果数字发生轻微变化,最低有效位具有快速变化的有用 属性 。例如,如果将 1(二进制 00000001)与 3(二进制 00000011)相加,结果将为 4(二进制 00000100)并且三个最低有效位将发生变化(011 变为 100)。相比之下,三个最高有效位 (MSB) 保持不变(000 到 000)。

伪随机数生成器、哈希函数和校验和中经常使用最低有效位。

一个真实世界的例子:

  • 操纵 LSB 是 Fenwick Tree
    可以用来求nos的总和。在 O(log N)

  • 范围内和更新数组中的数字
  • 操纵MSB就是二分查找
    使用位操作 --