0
從有符號的13位值轉換爲帶符號的16位值是否比下面介紹的有更漂亮的方式?兩個值都位於16位字中,13位值被移位3位。將帶符號的13位值轉換爲帶符號的16位
S = Sign, O = Value bit, X = Unused
a is the signed 13-bit | SOOO OOOO OOOO OXXX
b is the signed 16-bit | SOOO OOOO OOOO OOOO
當前實現
b = a & 0x7FF8; // Remove sign XOOO OOOO OOOO OXXX
b = b >> 3; // Shift value 3 bit XXXO OOOO OOOO OOOO
b = b | (a & 0x8000); // Add sign SXXO OOOO OOOO OOOO
是否得到編譯成?我已經看到編譯器爲我的凡人的大腦無法理解的事情做了一些棘手的優化。另外我想你所瞄準的架構可能會有所幫助。你總是可以用cs13bvts16b指令來定位一些CISC,並且永遠不會知道它... – 2013-04-22 09:25:26
你能否確認我們正在討論(a)2的補碼錶示和(b)C(或者一個緊密相關的語言)? – 2013-04-22 09:47:34
@PaulR a)你說得對,它是2的補充,b)我只是輸入了一些僞C,因爲我正在尋求一個通用的解決方案,我的實現將使用結構化文本。 – ihatetoregister 2013-04-22 10:13:22