Потому что в современных армиях отбрасывают часть звания, которое в старину звучало как "генерал-сержант-майор". Майор - значит "старший". Лейтенант - значит "заместитель". Генерал - значит "общий". Сержант - значит "служащий".
В старину было так (обобщенно). В роте командует лейтенант, ему помогает сержант. В полку командует полковник, ему помогает старший сержант (сержант-майор), теперь - просто майор. В корпусе командует генерал, ему помогает заместитель генерала (генерал лейтенант), а этому помогает генерал-сержант-майор. Со временем структура менялась неоднократно (и в разных странах по-разному), а в русском языке иерархия осталась такой.
В армии и сейчас неофициально говорят часто просто "старшой" вместо "старший лейтенант" или "старший прапорщик". А звание "старший ефрейтор" вообще выделило из себя отдельное звание "старшина".
Ответ просится, ну не может быть генерал- подполковник.
Я не военный, мне кажется так:
У майора и генерала майора 1 звезда.
У лейтенанта и генерала лейтенанта 2 звезды.
У полковника и генерала полковника 3 звезды.
После полковника, было бы логично генерал-младший лейтенант, но оставили генерал-майор.
Мне больше импонирует другая версия, по которой генералам дают звания, соответствующие, по погонам, старшим офицерам. Одна звезда - майор, две -- подполковник, три -- полковник. Но "генерал-подполковник" не звучит, посему взяли из младших офицеров.
Но генерал-лейтенанты появились тогда, когда обычные лейтенанты были только на флоте, и это плюс к версии Леонида.
С другой стороны, какое-то время они назывались "генерал-поручик", но, опять же, поручик -- это порученец, да...
Это объясняется тем, что обер-офицерские чины имеют своё происхождение из французской и английский армий. Лейтенант - это заместитель. То есть генерал-лейтенант - это заместитель генералов, которые командуют на всём поле боя. А майор - это (с латинского переводится как - старший). То есть генерал-майор командует войсками на определённом участке поле боя.
Фактически генерал-майор имеет больший личный состав, а генерал-лейтенант напрямую подчиняется вышестоящим генералам(генералу армии например).