В чем разница между «1L» и «1»?

Я часто видел, что символ 1L (или 2L , 3L и т. Д.) Появляется в R-коде. В чем разница между 1L и 1 ? 1==1L оценивает значение TRUE . Почему 1L используется в R-коде?

4 Solutions collect form web for “В чем разница между «1L» и «1»?”

Итак, @James и @Brian объяснили, что означает 3L. Но зачем вы его используете?

В большинстве случаев это не имеет значения, но иногда вы можете использовать его, чтобы ваш код работал быстрее и потреблял меньше памяти . Двойной («числовой») вектор использует 8 байтов на элемент. Целочисленный вектор использует только 4 байта на элемент. Для больших векторов это меньше потраченная впустую память и меньше, чтобы провалиться для CPU (так это, как правило, быстрее).

В основном это относится к работе с индексами. Вот пример, когда добавление 1 к целочисленному вектору превращает его в двойной вектор:

 x < - 1:100 typeof(x) # integer y <- x+1 typeof(y) # double, twice the memory size object.size(y) # 840 bytes (on win64) z <- x+1L typeof(z) # still integer object.size(z) # 440 bytes (on win64) 

... но также отметим, что чрезмерная работа с целыми числами может быть опасной:

 1e9L * 2L # Works fine; fast lean and mean! 1e9L * 4L # Ooops, overflow! 

... и, как отметил Гавин, диапазон для целых чисел примерно от -2e9 до 2e9.

Однако следует отметить, что это относится к текущей версии R (2.13). R может изменить это в какой-то момент (64-битные целые числа будут милыми, что может позволить векторы длиной> 2e9). Чтобы быть в безопасности, вы должны использовать .Machine$integer.max всякий раз, когда вам нужно максимальное целочисленное значение (и отрицать это для минимума).

Из раздела констант языка R Определение :

Мы можем использовать суффикс «L», чтобы квалифицировать любое число с целью сделать его явным целым числом. Таким образом, «0x10L» создает целочисленное значение 16 из шестнадцатеричного представления. Константа 1e3L дает 1000 как целое число, а не числовое значение и эквивалентно 1000L. (Обратите внимание, что «L» рассматривается как квалифицирующий термин 1e3, а не 3.) Если мы квалифицируем значение с «L», которое не является целочисленным значением, например 1e-3L, мы получаем предупреждение, а числовое значение создано. Предупреждение также создается, если в номере есть ненужная десятичная точка, например 1.L.

L указывает целочисленный тип, а не двойной, чем стандартный числовой class.

 > str(1) num 1 > str(1L) int 1 

Чтобы явно создать целочисленное значение для константы, вы можете вызвать функцию as.integer или просто использовать суффикс L.

  • Что представляет собой тип, за которым следует _t (underscore-t)?
  • Создание экземпляра Generic с переменной, содержащей тип
  • Каков правильный тип индексов массивов в C?
  • Как разрешить «должен быть экземпляр строки, строка, заданная» до PHP 7?
  • Interesting Posts

    Каков наилучший способ анализа XML dateTime в Java?

    Полиморфизм: зачем использовать «List list = new ArrayList» вместо «ArrayList list = new ArrayList»?

    ASP.NET MVC 4 Пользовательский авторизованный атрибут с кодами разрешений (без ролей)

    Сопоставление объекта со словарем и наоборот

    Сообщения Log4Net «Не удалось найти информацию о схеме»

    Не удается установить узловые модули, требующие компиляции в Windows 7 x64 / VS2012

    Создать папку в Android

    «Нет места на устройстве» после изменения размера раздела

    Как удалить выделение границы в текстовом элементе ввода

    Какова цель узла Assemblies в Web.Config?

    Программы для демонстрации высококачественной видеокарты?

    Зашифрованные контейнеры сжатия, такие как ZIP и 7-Zip, сжимают или шифруют в первую очередь?

    Можно ли измерить расстояние до объекта с помощью камеры?

    Основная версия 52 – новее, чем 51, самая высокая основная версия, поддерживаемая этим компилятором

    Максимальная прибыль от одной продажи

    Давайте будем гением компьютера.