12ビットの符号付整数を16bitに拡張したいんですけど、符号判定にif文を使わないで
書いた場合

short des;
A案
des = souce <<4 >>4 // と書いたらコンパイラの最適化で無視されて値変わらず
B案
des = souce <<4; // と2段に分けたら正常に通ります
des = des >>4;

聞きたいのは、これに最適化を書けた場合、やっぱり無効化されちゃいますでしょうか?
つーか こーいう書き方ってどうよ?
temp = souce <<4
des = temp >>4
と書けば最適化の影響は受けないけど、 読む人に不親切なコードでしょうか?