uint32_t rgb=0xFF0000;
uint32_t rgba = (rgb << 8) | 0xFF;
Объяснение: (rgb << 8)
сдвигает значение rgb на 8 бит влево. это означает, что он перемещается ровно на один байт влево, например, 0x12345678
изменится на 0x34567800
. Две верхние цифры после сдвига не поместятся в 32 бита, поэтому они удаляются. Все остальное сдвигается влево, а затем в нижнюю позицию добавляются новые нули.
Следующий оператор побитовый or
. это или применяется к каждому биту, поэтому 0x34567800 | 0xFF
приведет к 0x345678FF
(спасибо @Gajet за объяснение)