我发现了一些我无法解释的奇怪东西。如果某人在这里可以看到发生了什么或为什么,我想知道。我正在做的是含有高排列像这样的12位无符号短:C中的位移和指针奇怪,寻找解释
1111 1111 1111 0000
那么我想希夫位,这样在短期内保持7位与MSB作为垫每个字节。在什么上面给出的结果应该是这样的:
0111 1111 0111 1100
我所做的是这样的:
unsigned short buf = 0xfff;
//align high
buf <<= 4;
buf >>= 1;
*((char*)&buf) >>= 1;
这让我有点像看起来就像是正确的,但前一次换档的结果叶位设置是这样的:
0111 1111 1111 1100
很奇怪。如果我使用一个unsigned char用作临时存储和转变,那么它的工作原理,这样的:
unsigned short buf = 0xfff;
buf <<= 4;
buf >>= 1;
tmp = *((char*)&buf);
*((char*)&buf) = tmp >> 1;
这样做的结果是:
0111 1111 0111 1100
任何想法是怎么回事?
是的!感谢您的解释,现在正在工作。这让我发疯。 – foo 2010-05-16 18:12:56