Little-Endian签名整数

Leo*_*zen 9 signed endianness

我知道WAV文件格式使用16位样本的有符号整数.它还以little-endian顺序存储它们,这意味着最低的8位先到,然后是下一个,等等.第一个字节是特殊符号位,还是特殊符号位总是位于最高位(最高值) ?

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

++---+---+---+---+---+---+---+---++---+---+---+---+---+---+---+---++
|| a | b | c | d | e | f | g | h || i | j | k | l | m | n | o | p ||
++---+---+---+---+---+---+---+---++---+---+---+---+---+---+---+---++
--------------------------- here -> ^ ------------- or here? -> ^
Run Code Online (Sandbox Code Playgroud)

我还是p?

nos*_*nos 12

signed int,little endian:

byte 1(lsb)       byte 2(msb)
---------------------------------
7|6|5|4|3|2|1|0 | 7|6|5|4|3|2|1|0|
----------------------------------
                  ^
                  | 
                 Sign bit

在向某些外部媒体读取/写入短整数时,您只需要关注它.在你的程序中,无论你是在大型还是小型的平台上,符号位都是最短的位.


cHa*_*Hao 10

符号位是任何二进制补码机器上最重要的位(如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 -----^
Run Code Online (Sandbox Code Playgroud)

比特基本上代表了大多数人对它们的看法"向后",这就是为什么高字节是最后一个.但这一切都是一致的; "bit 15"位于"bit 0"之后,就像地址应该工作一样,并且仍然是该字的最重要字节的最高位.你不需要做任何麻烦,因为硬件会根据字节来讨论最低级别 - 所以当你读取一个字节时,它看起来就像你期望的那样.只要查看单词的最高位(或者它的最后一个字节,如果你一次读取一个字节),那就是你的符号位.

但请注意,两个补码并不完全将特定位指定为"符号位".这只是数字表示方式的一个非常方便的副作用.对于16位数字,-x等于65536-x而不是32768 + x(如果高位严格是符号,则属于这种情况).

  • 如果您正在读取实际字节而不是ASCII表示,那么是 - 低8位(因此,LSB)将*总是*是第一个字节,而高8(包括MSB)将*总是*是最后一点 - 这就是"小端"的含义.但是存储了字节中的位,但是硬件想要存储它们.除非您正在构建硬盘驱动器,否则您无需知道或关心其工作原理. (3认同)