Ta linijka służy do przerobienia liczby na znak. Wykonujemy modulo na liczbie – operacja zwraca liczbę 1 lub 0. Kody cyfr zaczynają się od 48, więc do tej reszty z dzielenia dodaje się właśnie 48. Jeśli modulo zwróci 0 to po dodaniu 48 wyjdzie 48 – to jest kod znaku 0. Jeśli zwróci 1 to po dodaniu 48 wyjdzie 49 – to jest kod znaku 1.
Teraz aby można było tę liczbę wykorzystać, należy ją zrzutować na znak – to właśnie robi char(), wynik liczbowy obliczeń znajdujących się pomiędzy nawiasami traktuje jako znak, który to dodawany jest do ciągu. Gdyby nie to rzutowanie to nie mógłbyś wyniku obliczeń dodać do ciągu – kompilator zgłosiłby niezgodność typów danych.
Istnieją dwa zapisy rzutowania jednego typu danych na drugi:
(char)(number % 2 + 48) – w stylu języka C,
char(number % 2 + 48) – notacja funkcyjna (funkcjonalna).
Ja przez przypadek użyłem drugiej, bo pomieszało mi się zapisem rzutowania z Pascala. Ale oba zapisy są prawidłowe, dlatego kod kompiluje się i działa prawidłowo. Po więcej informacji odsyłam do dokumentacji.