uint8_t *buf; int buf_pos; int buf_bit_pos; int get_bit() { if (buf_pos==-1) return -1; // end int rt=(buf[buf_pos] >> buf_bit_pos) & 1; if (buf_bit_pos==0) { buf_pos--; buf_bit_pos=7; } else buf_bit_pos--; return rt; }; uint32_t remainder_arith(uint32_t dividend, uint32_t divisor) { buf=(uint8_t*)÷nd; buf_pos=3; buf_bit_pos=7; uint32_t tmp=0; for(;;) { int bit=get_bit(); if (bit==-1) { printf ("exit. remainder=%d\n", tmp); return tmp; }; tmp=tmp<<1; tmp=tmp|bit; if (tmp>=divisor) { printf ("%d greater or equal to %d\n", tmp, divisor); tmp=tmp-divisor; printf ("new tmp=%d\n", tmp); } else printf ("tmp=%d, can't subtract\n", tmp); }; }