core.checkedint
Этот модуль реализует примитивы целочисленной арифметики, которые проверяют результаты на выход за пределы диапазона.
Операторы целочисленной арифметики работают с типами фиксированной ширины. Результаты, которые не могут быть представлены в этих фиксированных ширинах, неявно усекаются для соответствия. Этот модуль предлагает примитивы целочисленной арифметики, которые дают те же результаты, но устанавливают флаг «переполнение» при таком усечении. Установка флага «липкая», что означает, что можно выполнить множество операций, а затем проверить флаг только в конце. Подпись операции (знаковая или беззнаковая) обозначается суффиксом 's' или 'u' соответственно. Хотя этого можно достичь без таких суффиксов, используя перегрузку по знаковости типов, суффикс позволяет ясно указать, что происходит, без необходимости проверки типов.
Хотя общие версии этих функций вычислительно затратны по сравнению со стоимостью самой операции, реализации компилятора могут распознать их и сгенерировать эквивалентный и более быстрый код.
- Ссылки
- Быстрые проверки переполнения целых чисел
- Лицензия:
- Лицензия Boost 1.0
- Авторы:
- Walter Bright
- Исходный код
- core/checkedint.d
- int adds()(int x, int y, ref bool overflow);
long adds()(long x, long y, ref bool overflow); -
Сложить два целых знаковых числа, проверив переполнение.
Переполнение «липкое», то есть можно выполнить последовательность операций, а переполнение нужно проверить только в конце.
- Параметры:
int xлевый операнд int yправый операнд bool overflowустанавливается, если происходит переполнение, иначе не изменяется
- Возвращаемое значение:
- сумма
- uint addu()(uint x, uint y, ref bool overflow);
ulong addu()(ulong x, ulong y, ref bool overflow); -
Сложить два целых беззнаковых числа, проверив переполнение (т.е. перенос).
Переполнение «липкое», то есть можно выполнить последовательность операций, а переполнение нужно проверить только в конце.
- Параметры:
uint xлевый операнд uint yправый операнд bool overflowустанавливается, если происходит переполнение, иначе не изменяется
- Возвращаемое значение:
- сумма
- int subs()(int x, int y, ref bool overflow);
long subs()(long x, long y, ref bool overflow); -
Вычесть два целых знаковых числа, проверив переполнение.
Переполнение «липкое», то есть можно выполнить последовательность операций, а переполнение нужно проверить только в конце.
- Параметры:
int xлевый операнд int yправый операнд bool overflowустанавливается, если происходит переполнение, иначе не изменяется
- Возвращаемое значение:
- разность
- uint subu()(uint x, uint y, ref bool overflow);
ulong subu()(ulong x, ulong y, ref bool overflow); -
Вычесть два целых беззнаковых числа, проверив переполнение (т.е. заём).
Переполнение «липкое», то есть можно выполнить последовательность операций, а переполнение нужно проверить только в конце.
- Параметры:
uint xлевый операнд uint yправый операнд bool overflowустанавливается, если происходит переполнение, иначе не изменяется
- Возвращаемое значение:
- разность
- int negs()(int x, ref bool overflow);
long negs()(long x, ref bool overflow); -
Изменить знак целого числа.
- Параметры:
int xоперанд bool overflowустанавливается, если x нельзя изменить знак, иначе не изменяется
- Возвращаемое значение:
- отрицание x
- int muls()(int x, int y, ref bool overflow);
long muls()(long x, long y, ref bool overflow); -
Перемножить два целых знаковых числа, проверив переполнение.
Переполнение «липкое», то есть можно выполнить последовательность операций, а переполнение нужно проверить только в конце.
- Параметры:
int xлевый операнд int yправый операнд bool overflowустанавливается, если происходит переполнение, иначе не изменяется
- Возвращаемое значение:
- произведение
- uint mulu()(uint x, uint y, ref bool overflow);
ulong mulu()(ulong x, uint y, ref bool overflow);
ulong mulu()(ulong x, ulong y, ref bool overflow); -
Перемножить два целых беззнаковых числа, проверив переполнение (т.е. перенос).
Переполнение «липкое», то есть можно выполнить последовательность операций, а переполнение нужно проверить только в конце.
- Параметры:
uint xлевый операнд uint yправый операнд bool overflowустанавливается, если происходит переполнение, иначе не изменяется
- Возвращаемое значение:
- произведение
© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/core_checkedint.html