В программировании не только данные делятся на типы, но и сами типы тоже бывают разных видов. Всё это специально, чтобы запутать начинающих программистов ))) Видимо поэтому (чтобы упростить жизнь программистам) многие современные языки программирования являются нетипизированными. Хотя лично для меня это скорее недостаток, чем преимущество. Переменные разных типов занимают в памяти разный объём. Например, в C# тип int занимает 4 байта, а C++ не менее 2 (обычно зависит от реализации и/или от архитектуры компьютера). Но в любом случае это фиксированный размер. То есть в C# переменная типа int будет ВСЕГДА занимать в памяти 4 байта, независимо от того, какое число в ней хранится, 0, -1 или 2000000. Значение такой переменной хранится непосредственно в том месте памяти, на которое указывает переменная. То есть переменная напрямую связана со значением. Поэтому такие типы данных называются типы-значения (values types). Кстати, размер типа в байтах вы можете получить, например, так: sizeof(int)