Целочисленных переменные хранятся в виде 16-битных (2 байта) чисел
msdn
Long (длинное целое) переменные хранятся в виде 32-разрядных (4 байта номера
msdn
)
Итак, преимущество в сокращении объема памяти. Целое число занимает половину памяти, которая длится долго. Теперь мы говорим о 2 байтах, так что это не изменится, если вы не храните TON целых чисел.
НО на битной системе , 16-битное целое получает молча преобразуется в длинный без использования большего диапазона чисел для работы с. Переполнение все еще происходит, и требуется столько же памяти. Performance may even be hurt, потому что тип данных должен быть преобразован (на очень низком уровне).
Не ссылка, которую я искал, но ....
Я понимаю, что базовый движок VB преобразует целые числа в длинные, даже если объявлен как целое. Поэтому можно отметить небольшое снижение скорости. Я верил в это какое-то время и, возможно, это также объясняется тем, что было сделано выше, я не просил рассуждать.
ozgrid forums
Это ссылка, которую я искал.
Короткий ответ в 32-битных системах 2 байтовых целых числа преобразуются в 4 байт Длинны. Нет никакого другого способа, чтобы соответствующие биты правильно линии для любой формы обработки. Рассмотрим следующий
MsgBox Hex(-1) = Hex(65535) ' = True
Очевидно -1 не равна 65535 пока компьютер возвращает правильный ответ, а именно «FFFF» = «FFFF»
Однако если бы мы принуждены -1 к длинному первых, мы получили бы правильный ответ (65535 быть больше, чем 32k автоматически длинный)
MsgBox Hex(-1&) = Hex(65535) ' = False
"FFFFFFFF" = "FFFF"
Как правило, в VBA нет смысла объявлять «как целое» в современных системах , за исключением, возможно, для некоторых устаревших API, которые ожидают получить целое число .
pcreview forum
И наконец я нашел msdn documentation я действительно действительно искал.
Традиционно программисты VBA использовали целые числа для хранения небольших номеров , потому что им требовалось меньше памяти. Однако в последних версиях VBA преобразует все целочисленные значения в тип Long, даже если они являются , объявленными как тип Integer. Таким образом, для использования переменных Integer больше нет преимущества производительности ; Фактически, длинные переменные могут быть немного быстрее, потому что VBA не нужно их преобразовывать.
Таким образом, в настоящее время почти нет веской причины использовать тип Integer
. Если, вам нужно взаимодействовать со старым вызовом API, который ожидает 16-битный int.
Одна вещь стоит отметить, что некоторые старые функции API могут ожидать параметры, которые являются 16-битными (2 байта) Целые и если вы на 32 бита и пытается передать Integer (то есть уже 4-байтовый) по ссылке, он не будет работать из-за разницы в длине байтов.
Благодаря Vba4All для указания этого.
Вы спрашивали себя, почему существуют разные типы данных (* числовые *)? –