#include #include long extend(long oldval, int newbits) { int oldhighbits = oldval & 0x3000; int newhighbits = newbits & 0x3000; long newval = (oldval & ~0x3fff) | newbits; if(oldhighbits == 0x3000 && newhighbits == 0) newval += 0x4000; else if(oldhighbits == 0 && newhighbits == 0x3000) newval -= 0x4000; return newval; } int main(int argc, char **argv) { int i, v=0; for(i=0; i<1638400; i++) { int j = (v + lrand48() % 8191 - 4095); v = extend(v, j & 0x3fff); if(j != v) printf("% 8ld (%08lx) % 8ld (%08lx)\n", v, v, j, j); assert(j == v); } return 0; }