ビット演算の質問ですが

(ABCDは0または1の任意のビットとする)
0000ABCD
を
A0B0C0D0
に変換するスマートな方法はないものでしょうか?

今のところは、左シフトもしくは加算でAならAだけをとりあえず目的の位置に移動したのち&でゴミを除去、
というのをビットの桁数ぶんだけ行うという地道な方法しか思いつかない状態です。