Libro de respuestas K&R ejercicio 1.21

Aquí está la pregunta:

Escriba el entab de programa que reemplaza las cadenas de espacios en blanco por el número mínimo de pestañas y espacios en blanco para lograr el mismo espacio. Use la misma pestaña que para detab. Cuando una pestaña o un solo espacio en blanco sería suficiente para alcanzar una tabulación, ¿a qué debería darse preferencia?

Hice el ejercicio yo mismo, y la respuesta del libro tiene una solución diferente. No estoy entendiendo una fórmula matemática que se ejecuta cuando se lee una pestaña de la secuencia de entrada. Aquí está el código:

#include <stdio.h>
#define TABINC 8

main()
{
int c, nb, nt, pos;

nb = 0;
nt = 0;
for (pos = 1; (c =getchar()) != EOF; ++pos)
    if (c == ' '){
        if (pos % TABINC != 0)
            ++nb;
        else {
            nb = 0;
            ++nt;
        }
    }
    else {
        for ( ; nt > 0; --nt)
            putchar('\t');
        if (c == '\t')
            nb = 0;
        else
            for ( ; nb > 0; --nb)
                putchar(' ');
        putchar(c);
        if ( c == '\n')
            pos = 0;
        else if (c == '\t')
            pos = pos + (TABINC - (pos - 1) % TABINC) - 1;
    }
}

La parte que no entiendo es la siguiente:

else if (c == '\t')
    pos = pos + (TABINC - (pos - 1) % TABINC) - 1;

Puedo ver a través de la depuración en Visual Studio que esta construcción lleva la posición a la siguiente tabulación cuando se produce una pestaña desde el flujo de entrada. ¿Es esto correcto?

Lo que realmente no entiendo es cómo funciona esta fórmula o cómo se le ocurrió. ¿Es esta una fórmula común que ocurre en la programación? ¿Es útil? Eso tiene un nombre?

Edición: Entiendo lo que hace el operador de módulo. Lo siento, no especifiqué eso.

Respuestas a la pregunta(2)

Su respuesta a la pregunta