Другие языки программирования и технологии

Что имеется ввиду под 4 байтами у типа данных int?(С++)

Например в какой ситуации переменная с типом данных int будет занимать больше чем 4 байта? Если это просто значение переменной с типом данных int, то оно всегда будет занимать не более 4 байт? А если больше, то это массив с множеством элементов целочисленного типа?
Могли бы вы объяснить то, что выше и по возможности как устроено, просто я не могу ещё понять того, что я должен в этой ситуации понять:)
Для Александра Трифонова: " каждая переменная типа int будет занимать 4 байта (или 32 бита) , на 64 битной системе - она уже будет занимать 64 бита или 8 байт разумеется". Как? если в асме будет написано mov eax,100 то в 64битной это будет mov eax,100 (32-битная) ! а не mov rax,100 (64-битная) . Для этого нужно перекомпелировать под 64битную!
а по существу вопроса: если компилятор решил что int - 32 битная (4 байта по 8 бит=4*8=32бита) . то он будет весить 4 байта и баста! что бы изменить размер, надо менять тип или ставить перфиксы типа Short (короткий) , если бы конечно вы знали немного ассемблер, то было бы проще понимать, но что есть то есть, принимайте как данность! только на заметку берите - есть знаковые и беззнаковые...
Николай Черновал
Николай Черновал
64 558
Лучший ответ
Ну, как говорится, есть теория, а есть практика.
С точки зрения теории, то здесь уже совершенно точно отметили, что стандарт С/С++ не определяет размеров типов, а только лишь правила, какие типы должны быть больше, а какие меньше. Конкретные размеры зависят от процессора (в основном) и от компилятора.
Практика же показывает, что в подавляющем большинстве случаев компилятор выбирает такой размер типа int, который по размеру равен размеру регистров процессора - т. к. именно такой код будет работать быстро. Именно поэтому int для 16-битных x86 - 2 байта, 32-битных x86 - 4 байта, для x64 - 8 байт. Исключения бывают, но крайне редки. Например, для 8-битных процессоров в некоторых случаях компилятору можно указать int - 16 бит.
тип int не 4 и не 8 байт :), все ответы неправильные. модификаторы типа short и long тоже не ничего не говорят о размере. Невероятно, но факт - C++ не стандартизирует размер целочисленных типов, на разных платформах, это могут быть совершенно разные значения sizeof(int), 16 бит (2 байта) , 32 бита (4 байта) - мы привыкли к этому, 64 бита - 8 байт, размер занимаемой памяти устанавливается не стандартом C++, а, компилятором, по-идее можно сделать и другие значения (типа дурацких 6 байтов) . Стандарт гарантирует только отношение : sizeof char <= sizeof short <= sizeof int <= sizeof long . На win64 msvc++ sizeof int = 4 байтам, т. е. нет, он не занимает 8 байт в виндовсе64, на некоторых linux 64 платформах - да, занимает 8 байт.

tbh: разницы никакой пока не начинается адресная арифметика.
Вопрос не понятный конечно! Целый тип данных будет всегда равен 4 байтам. если это число не вписывается в 4 байта есть другие типы данных, но это дело за программистом какой тип брать
Имеется ввиду что каждая переменная типа int будет занимать 4 байта (или 32 бита) , на 64 битной системе - она уже будет занимать 64 бита или 8 байт разумеется.
если применить модификатор short int (или просто short), то целочисленная переменная будет занимать 2 байта.
если записать long int, то она будет занимать больше места, либо те же 4 байта, это зависит от компилятора.
Массив знает сколько места занимает одни его элемент, ибо он утроен с помощью указателей и оператора sizeof() так что это будет обычный целочисленный массив.