1) потому что новое значение нигде не присваивается, лишь используется значение для вычисления выражения, и то как она передана в ф-цию в данном случае роли не играет, и в данном случае это не ссылка, а указатель.
2) data = val >> 24; если не заморачиваться с платформами и битностью.