#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
uint32_t iterations = 0;
uint32_t div_val(uint32_t x, uint32_t divider){
uint32_t res = 0;
uint32_t divider_pow = divider;
// Get the x shifted on N bits right
while (x >= (divider_pow << 1)) {
divider_pow <<= 1;
iterations++;
}
while (divider_pow >= divider) {
res <<= 1;
if (x >= divider_pow) {
x -= divider_pow;
res |= 1;
}
divider_pow >>= 1;
iterations++;
}
return res;
}
int main(void) {
volatile uint32_t x = 12345678;
uint32_t value = div_val(x, 100);
printf("Hello: %d, 0x%04x\n", value, value);
printf("Iterations: %d\n", iterations);
}