Я не могу указать вам направление в том, что касается книг, но я могу уточнить это:
Первое, что меня интересует, это то, что компилятор превращает мои программы на C в двоичный код, однако когда я открываю (exe) файлы результатов, я нахожу что-то отличное от 0 и 1.
Ваши программы фактически скомпилированы в двоичный файл. Все на вашем компьютере хранится в двоичном формате.
Причина, по которой вы не видите единиц и нулей, заключается в структуре кодировки символов. Для хранения одного байта требуется восемь битов, которые могут иметь значение 0 или 1. Многие программы и кодировки символов представляют один байт как один символ (с оговоркой не-ASCII-символов Юникода, но это не очень важно в этом обсуждении).
Итак, программа, которую вы используете для открытия файла, интерпретирует последовательности из восьми битов и превращает эти восемь битов в один символ. Таким образом, каждый символ, который вы видите при открытии файла, на самом деле, это восемь единиц и нулей. Самое основное отображение между байтами и символами - ASCII . Символ «A», например, представлен в двоичном виде как 01000001. поэтому, когда программа, которую вы используете для открытия файла, видит эту битовую последовательность, она будет отображать «A» на своем месте.