Purpose of random() << 32


I was trying to do the challenge at the end of this chapter and I encountered the following code:

int main(int argc, const char *argv[]) {
   @autoreleasepool {
      // Generate 8 bytes of random data
      srandom((unsigned int)time(NULL));
      int64_t randomBytes = (random() << 32) | random(); // having trouble understanding this line of code

I am having trouble understanding the reason for …(random() << 32) | random();.
This is the way I am reading the code. I know random() returns a long int which is at least a 32 bit number. On some systems long int can be 64 bits. For those systems …random() << 31… will multiply the random number by 2^32. For systems where long int is just 32 bits, the random number will get shifted 32 bits left to equal 0 and thus just call random(). Why not just call random() in both scenarios?