целые числа 64-бит

joumey

Активный
Автор темы
194
44
Версия MoonLoader
Другое
Использует ли Lua 64-битные целые числа? Если да, то как мне их использовать?
 
Решение
в lua до версии 5.3 все числа по умолчанию являются числами с плавающей запятой двойной точности, с версии 5.3 числа делятся на 64-разрядные целые и вещественные, типы чисел определяются литералами и в результате разных операций преобразования (например math.tointeger). в luajit с обычными числами всё так же, как в lua 5.2 и прежних, но есть ещё boxed-значения, в их числе знаковые и беззнаковые 64-разрядные целые, поддерживающие арифметику. создать значение такого типа можно с помощью ffi: local a = ffi.new('int64_t', 282) или с помощью литералов со специальными суффиксами, которые есть только в luajit: local signed = 282LL, local unsigned = 282ULL. такие числа нельзя использовать в качестве ключей таблицы и передавать...

FYP

Известный
Администратор
1,768
5,987
в lua до версии 5.3 все числа по умолчанию являются числами с плавающей запятой двойной точности, с версии 5.3 числа делятся на 64-разрядные целые и вещественные, типы чисел определяются литералами и в результате разных операций преобразования (например math.tointeger). в luajit с обычными числами всё так же, как в lua 5.2 и прежних, но есть ещё boxed-значения, в их числе знаковые и беззнаковые 64-разрядные целые, поддерживающие арифметику. создать значение такого типа можно с помощью ffi: local a = ffi.new('int64_t', 282) или с помощью литералов со специальными суффиксами, которые есть только в luajit: local signed = 282LL, local unsigned = 282ULL. такие числа нельзя использовать в качестве ключей таблицы и передавать без преобразования (tonumber) в нативные функции, принимающие обычные числа.
 

joumey

Активный
Автор темы
194
44
в lua до версии 5.3 все числа по умолчанию являются числами с плавающей запятой двойной точности, с версии 5.3 числа делятся на 64-разрядные целые и вещественные, типы чисел определяются литералами и в результате разных операций преобразования (например math.tointeger). в luajit с обычными числами всё так же, как в lua 5.2 и прежних, но есть ещё boxed-значения, в их числе знаковые и беззнаковые 64-разрядные целые, поддерживающие арифметику. создать значение такого типа можно с помощью ffi: local a = ffi.new('int64_t', 282) или с помощью литералов со специальными суффиксами, которые есть только в luajit: local signed = 282LL, local unsigned = 282ULL. такие числа нельзя использовать в качестве ключей таблицы и передавать без преобразования (tonumber) в нативные функции, принимающие обычные числа.
Тоесть если я создам local a = ffi.new('int64_t', 282), то это число не будет уходить в минус после 2147000000? Если да, то как его в ини всунуть?