忠忠的新百宝袋

做人要厚道

低字节的高位和高字节的低位是不是连续的

Posted by Kai on October 9th, 2008

我今天才明白字节中的位的顺序,低位的地址在高位前面。这个看起来很容易的结论,我混淆了很久。

因为我们平时的微操作中,右移是变大,左移是变小,并且在用十六进制或者二进制表示一个数字的时候,都是高位在左边,低位在右边,所以我一直以为在一个字节里面,最低地址的位,是低7位,最高的是0.

比 如一个字节的大小是1,那么我以前的理解是在这个字节里面位的排列是(p)00000001(p+1)00000000,与二进制表示方法 B00000001一样。因为我平时画内存模型的时候,都是左边用小地址,右边是大地址,比如一个数组,4个元素,我会用||p|| p+1||p+2||p+3||。

今天看了一个MSDN上关于DTX5的编码格式的说明,里面提到了一个block里面的alpha数据的保存,

Byte Alpha
0 Alpha_0
1 Alpha_1
2 [0][2] (2 MSBs), [0][1], [0][0]
3 [1][1] (1 MSB), [1][0], [0][3], [0][2] (1 LSB)
4 [1][3], [1][2], [1][1] (2 LSBs)
5 [2][2] (2 MSBs), [2][1], [2][0]
6 [3][1] (1 MSB), [3][0], [2][3], [2][2] (1 LSB)
7 [3][3], [3][2], [3][1] (2 LSBs)

顿时很奇怪,因为按照第[0][2]个像素的alpha数据有两个位是在第2个字节的高位,有1个位是在第3个字节的最低位。但是如果高位在左边的话,这两个存储就不是连续的。

为了确定高位到底是在哪边,于是我做了1个实验。
unsigned char  B[2];
B[0] = (unsigned char)(0×80);
B[1] = (unsigned char)(0×01);
unsigned short S = *((unsigned short*)(B));
cout<<S<<endl;
低字节是B1000 0000, 高字节是B0000 0001, 合成的双字节如果是B0000 0001 1000 000那就说明低字节的高位和高字节的低位是连续的, 否则,如果合成的双字节是B0000 0001 0000 0001就表示不是连续的。

结果表明,低字节的高位和高字节的低位是连续的。

好像我自己说着说着有点乱了。。。。

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*
To prove you're a person (not a spam script), type the security word shown in the picture.
Anti-Spam Image

 
FireStats icon Powered by FireStats