#include <stdio.h>
#include <limits.h>
int DivByShifting1(int n, unsigned shift)
{
int sgn = n >> ((sizeof(int) * CHAR_BIT) - 1);
return ((((n + sgn) ^ sgn) >> shift) + sgn) ^ sgn;
}
int main(void)
{
int n, s;
for (n = -10; n <= 10; n++)
for (s = 0; s <= 4; s++)
printf("%d / %d = %d\n", n
, 1 << s
, DivByShifting1
(n
, s
)); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxsaW1pdHMuaD4KCmludCBEaXZCeVNoaWZ0aW5nMShpbnQgbiwgdW5zaWduZWQgc2hpZnQpCnsKICBpbnQgc2duID0gbiA+PiAoKHNpemVvZihpbnQpICogQ0hBUl9CSVQpIC0gMSk7CiAgcmV0dXJuICgoKChuICsgc2duKSBeIHNnbikgPj4gc2hpZnQpICsgc2duKSBeIHNnbjsKfQoKaW50IG1haW4odm9pZCkKewogIGludCBuLCBzOwogIGZvciAobiA9IC0xMDsgbiA8PSAxMDsgbisrKQogICAgZm9yIChzID0gMDsgcyA8PSA0OyBzKyspCiAgICAgIHByaW50ZigiJWQgLyAlZCA9ICVkXG4iLCBuLCAxIDw8IHMsIERpdkJ5U2hpZnRpbmcxKG4sIHMpKTsKICByZXR1cm4gMDsKfQo=