キャストについて質問です。

unsigned short (うちの環境では16bit) 型の変数を
signed int に変換したいのです。

何も問題なさそうなのですが、ひとつ大問題があったのです。
unsigned short の中身は *本当は符号付き* だったのです。

signed short に入れてから signed int に入れなおすより簡単で
実行時効率もいい解決方法はありますか?