с макушки головы:
int subMask = sgn - 1;
x -= pow2 & subMask;
int addMask = -sgn;
x += pow2 & addMask;
Никаких гарантий того, работает ли это или умно, нет, это просто случайная идея, которая пришла мне в голову.
РЕДАКТИРОВАТЬ: давайте сделаем это немного менее читабельным (он же более компактный):
x += (pow2 & -sgn) - (pow2 & (sgn-1));