我知道WAV文件格式对16位样本使用带符号的整数。它还以低位字节序存储它们,这意味着最低的8位排在前面,然后是下一个,依此类推。是第一个字节上的特殊符号位,还是始终在最高有效位上(最高值)的特殊符号位?

意义:
WAV格式的符号位是哪一位?

++---+---+---+---+---+---+---+---++---+---+---+---+---+---+---+---++
|| a | b | c | d | e | f | g | h || i | j | k | l | m | n | o | p ||
++---+---+---+---+---+---+---+---++---+---+---+---+---+---+---+---++
--------------------------- here -> ^ ------------- or here? -> ^

我还是p?

最佳答案

符号位是任何二进制补码机(例如x86)上的最高有效位,因此将以小尾数格式显示在最后一个字节中

只是因为我不想成为不包括ASCII艺术的人... :)

+---------------------------------------+---------------------------------------+
|              first byte               |              second byte              |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|  0 |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 | 10 | 11 | 12 | 13 | 14 | 15 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
   ^--- lsb                                               msb / sign bit -----^

从大多数人的角度来看,位基本上是“向后”表示的,这就是为什么高字节在后的原因。但这都是一致的。正如地址一样,“bit 15”紧随“bit 0”之后,仍然是该字最高有效字节中的最高有效位。您无需做任何事情上的纠结,因为除了最低级别外,硬件都以字节为单位进行对话-因此,当您读取一个字节时,它看起来完全符合您的期望。只需查看单词的最高有效位(如果您一次读取一个字节,则查看其最后一个字节),便有一个符号位。

但是请注意,二进制补码并没有确切地将特定位指定为“符号位”。这只是数字表示方式的一个非常方便的副作用。对于16位数字,-x等于65536-x而不是32768 + x(如果高位严格是符号,则情况会如此)。

10-07 19:04
查看更多