Historically many computers used 8-bit processors (CPU), then later 16-bit CPUs. On a 16-bit computer, an int would be a 16-bit value. When something more precise was required, type long could be used, which was a 32-bit value.
But nowadays most computers use a 32-bit or even 64-bit CPU, and the size of an int has changed, along with that. The actual sizes of the each type will depend on several things, the hardware itself, and the operating system, and the particular compiler. Thus it isn't safe to assume anything, except that a type long on a given compiler will be at least as large as a type int.
Not exactly. The larger type of char is wchar_t
And a double is in effect a "long float". It's best to think of float as analogous to a 16-bit int, and a double as being similar to an int
There is also a longdouble which is a bit more precise than a plain double, but it certainly isn't twice as long (usually).