Dodawanie z przeniesieniem (ang. addition with carry, mnemonik asemblera x86 ADC) to operacja arytmetyczna polegająca na dodaniu 2 liczb n-bitowych i jednej 1-bitowej która daje (n+1)-bitowy wynik:
Operacja ta umożliwia proste dodawanie liczb dowolnej wielkości. Bez niej potrzebny byłby znacznie większy i wolniejszy kod ze skokami warunkowymi. Jest też bardzo tania do implementacji w sprzęcie, jeśli ma on tylko dodawanie (konieczne w każdym praktycznym procesorze) oraz flagę przeniesienia (konieczną do wielu innych celów, np. porównywania liczb).
Załóżmy, że ALU potrafi dodawać 8-bitowe liczby, a chcemy dodać 2 liczby 32-bitowe a
i b
, zapisane w 4 bajtach każda a[0], a[1], a[2], a[3]
i b[0], b[1], b[2], b[3]
.
Najpierw dodajemy (operacją dodawania bez przeniesienia lub wyzerowawszy bit przeniesienia) najmniej znaczące bajty:
256 * Carry1 + c[0] = a[0] + b[0] + 0
Następnie trzykrotnie robimy dodawanie z przeniesieniem:
256 * Carry2 + c[1] = a[1] + b[1] + Carry1
256 * Carry3 + c[2] = a[2] + b[2] + Carry2
256 * Carry4 + c[3] = a[3] + b[3] + Carry3