我知道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(如果高位严格是符号,则情况会如此)。