Безопасно предположить, что -LLONG_MAX
(отрицается LLONG_MAX
) принадлежит long long
диапазоне?
Можно ли предположить, что если LLONG_MIN < -LLONG_MAX
, то LLONG_MIN == -LLONG_MAX - 1
?
Гарантировано ли стандартом или только всеми реальными устройствами, либо LLONG_MIN == -LLONG_MAX - 1
, либо LLONG_MIN == -LLONG_MAX
?
Эти три утверждения справедливы и в случае реализации использует один из 2-х в дополнение, 1 дополнением, или знак и величину, чтобы представлять подписанные целочисленные типы. -LLONG_MAX
находится в диапазоне long long
во всех трех схемах, а LLONG_MIN
- -LLONG_MAX
(дополнение 1, знак и величина и, возможно, дополнение 2) или -LLONG_MAX-1
(возможно, дополнение 2). 2 могут использовать эту дополнительную ценность в качестве представления ловушки, так же как машины с дополнением, знаками и величинами могут использовать отрицательный ноль в качестве представления ловушки. Поэтому ответ на ваши вопросы «да», если стандарт предусматривает, что реализация использует одну из этих схем.
Стандарт C (к которому C++ стандарт откладывает во многих местах) мандаты либо дополнения до 2, 1 в комплемента, или знак и величину:
C11 6.2.6.2 типы Integer:
Если знаковый бит равен единице, значение должно быть изменено одним из следующих способов:
- соответствующее значение со знаком бит 0 отрицается (знак и величина);
- бит знака имеет значение - (2M) (дополнение двух);
- бит знака имеет значение - (2M - 1) (дополнение к одному).
стандарт C++, кажется, немного более открытым:
C++ 14 3,9.1 Фундаментальные типы:
Представления интегральных типов должны определять значения с использованием чистой двоичной системы нумерации . [Пример: настоящий международный стандарт допускает дополнение 2, дополнение к дополнению и знак соответствия для интегральных типов. - конец примера]
Сноска 51, которая определяет, что «чистая двоичную систему счисления» означает, по-видимому, исключают десятичные системы, а также смещение систем (где 0 не все биты ноля):
51) Позиционное представление для целых чисел, которое использует двоичные цифры 0 и 1, в которых значения, представленные последовательными битами, являются аддитивными, начинаются с 1 и умножаются на последовательную интегральную мощность 2, за исключением, бит с наивысшей позицией.
Практически говоря, все, что осталось, дополняют друг друга, дополняют друг друга, знака и величины: те же схемы, которые предусмотрены стандартом C. Я сомневаюсь, что продавец коснется машины, которая использует новую схему 21-го века для представления целых чисел и каким-то образом отвечает букве закона стандарта C++ (но, следовательно, несовместима с C).
Поделитесь своим исследованием. –
@ code0 Какие исследования? OP хочет знать, соответствует ли его гипотеза стандартным требованиям. – NathanOliver
@ code0 не удалось найти связь между MIN и MAX знаковых целых типов ни в стандартном черновике C++ 11, ни в стандартном черновике C11. Может, я что-то пропустил. –