掛け算をシフトで?
規格準拠にしたければ、絶対値を取って正の数に対してやればよいじゃん。

2の補数を仮定してよいならunsignedにキャストしてやれば良い。