I'm doing a small embedded project where I have 40 bits transferred through a SPI type interface. I pull these bits off of a 32 bit bus and place the upper 32 bits into a uint32_t variable and the lower 8 bits into a uint8_t variable. I'm trying to combine them into a single uint64_t. However when I shift by 8, it drops the top 8 bits. Here is my code.
uint64_t getError()
{
    uint32_t * disp_addr = (uint32_t*)(MYDISPLAY);
    uint64_t error_upper;
    uint8_t error_lower;
    uint64_t error= 0;
    error_lower = *(disp_addr+1);
    error_upper = *(disp_addr+0);
    error = ((uint64_t) error_upper) <<8 | error_lower;
    return error;
}
This code is working except for the fact that it's dropping my top 8 bits. Any thoughts or hints would be greatly appreciated. Thanks.
edit
uint64_t getError()
{
    uint32_t * disp_addr = (uint32_t*)(MYDISPLAY);
    uint64_t error_upper;
    uint8_t error_lower;
    uint64_t error= 0;
    error_lower = 0x34;
    error_upper = 0xABCDEF12;
    error = ((uint64_t) error_upper) <<8 | error_lower;
    printf("%010x", error);
    //return error;
}
Results: 00cdef1234
 
     
     
    