Browsing this Thread:
1 Anonymous Users
|
C code 如何將24bits truncated 成16bits
|
|
初級會員
Joined
: 2009/2/2 17:01 最後登入時間
: 2010/5/5 11:45
Group:
註冊會員
Level : 4 HP : 0 / 85 MP : 10 / 3898 EXP : 40
|
下面是一段程式我一直不懂的是它要把24bit 變成16bits 而大於16bit的它就把它刪掉 所以第一段code它應該要判段它的最高位元的如果為負號而且它比0x8000更負的話就都設定成 0x8000但是這段敘述 if((poserror.i[1] != 0xffff) || !(poserror.b[1] & 0x80)) 怎看都不太對勁,如果我是0xffff7fff 那poserror.b[1]=7f, 那!(poserror.b[1] & 0x80)為 ture所以進去然後被設成0xffff8000;就跟想的不太一樣 有人可以解惑嗎? 這是an718的一段程式應該沒錯 總覺得我不知那裡想錯了。附件有所有程式碼
//第一段code if (poserror.b[2] & 0x80)// If position error is negative. { poserror.b[3] = 0xff; // Sign-extend to 32 bits. if((poserror.i[1] != 0xffff) || !(poserror.b[1] & 0x80)) { poserror.i[1] = 0xffff;// Limit error to 16-bit signed //integer. poserror.i[0] = 0x8000; } else; }
//第二段code else // If position error is positive. { poserror.b[3] = 0x00; if((poserror.i[1] != 0x0000) || (poserror.b[1] & 0x80)) { poserror.i[1] = 0x0000; // Limit error to 16-bit // signed integer. poserror.i[0] = 0x7fff; } else;
Attach file:
Link only for registered users
發表於: 2009/4/13 22:25
|
|
You can view topic.
你 不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.