When/why are CUdevice's not the same as their ordinal?

Consider:

CUresult cuDeviceGet ( CUdevice* device, int  ordinal )

seeing how

typedef int CUdevice;

Why isn’t the device’s int ordinal also its CUdevice? What causes discrepancies between these values?