A1: Да, при обращении к cp [8] было бы неопределенное поведение.
A2: Да, он также не печатает cp [0].
Как показано, он печатает байты 7, 8, 5, 6, 3, 4, 2, 1 действительных значений 0..7. Итак, если вы правильно скопировали код из книги, в коде книги есть ошибка. Проверьте страницу с ошибками для книги, если она есть.
Также странно, что он разматывает петлю; более простая формулировка:
for (int i = sizeof(double); i-- > 0; )
printBinary(cp[i]);
Существует также, по-видимому, веская причина для печати байтов в обратном порядке; не очевидно, что это будет.