Ta funkcja dodaje dwie liczby 16-bitowe. Wynik może być niekiedy większy niż 16-bitów i ta funkcja zwraca te wyższe 16-bitów. Ten overflow to jest zawsze 1 albo 0.
uint16_t carry_hi(uint16_t a, uint16_t b)
{
uint16_t sum = a + b;
return sum < a;
}
Pytanie, czy warunek sum < a i całą funkcję można jakoś zapisać za pomocą operacji na bitach, coś w rodzaju:
carry_hi = ((a+b) >> 1) & a
Ewentualnie jakieś mnożenie lub modulo, ale to by było już nieco wolniejsze. Kombinuję i nic nie umiem wymyślić.