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?