符号付き整数を符号維持したまま右シフトするもっとも単純な方法って?
FAQには符号付き整数の右シフトは処理系依存と書いてあります。

#define RSHIFT(i,n) ((i>0?1:(-1))*(signed)(((unsigned)i)>>n))

こんな馬鹿みたいなのしか思いつかないのですが。