我發現了一些我無法解釋的奇怪東西。如果某人在這裏可以看到發生了什麼或爲什麼,我想知道。我正在做的是含有高排列像這樣的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