ビットをゼロにしたいときは "押し込んで、引っ込める" って聞きました。
解決されていますが、#define版を作ったので投稿してみます。
//1回だけズラして最上位ビットを0に。そして残りのシフトをする。
#define ctype RightBitShift2(%1,%2) ( ((%1 >> 1) | 0x80000000 ^ 0x80000000 ) >> (%2-1) )
// 以下サンプル
x = 0x8123ABCD; // 最上位ビットが1の適当な数値
y = RightBitShift2( x, 15 ); // 0埋めで右に15ビットシフト
mes y;
// 確認
color 255,0,0
mes " x>>15 = "+ ( x >> 15 ) + " ←これはNG"
color
x = 0x7123ABCD; // 最上位ビットが0の適当な数値
y = RightBitShift2( x, 15 ); // 0埋めで右に15ビットシフト
mes y;