Каков максимальный гарантированный диапазон N-разрядного целого числа со знаком? - PullRequest
2 голосов
/ 27 июня 2019

Немного предыстории:

  • До C ++ 20 стандарт C ++ допускал любое целочисленное представление со знаком, а минимальный гарантированный диапазон N-разрядных целых чисел со знаком составлял от -(2^(N-1) - 1) до * 1005.*.
  • C ++ 20 стандартное предложение (как упомянуто @Sneftel) допускает единственное представление с гарантированным диапазоном от -2^(N-1) до +2^(N-1) - 1.
  • Насколько я понимаю, диапазон значений min-max должен быть непрерывным.

Я пытался найти любые кавычки для максимального диапазона N-разрядного целого числа со знаком, но не нашел ни одного.

Так что мне интересно (в терминах C ++):

  1. Правильно ли считать, что максимально возможный диапазон N-разрядного целого числа со знаком ограничен от -2^(N-1) до +2^(N-1)?Может ли он быть шире?
  2. Может ли это быть затронуто реализацией бита базовой платформы - например, "3-state-bit" или что-то в этом роде?

Ответы [ 2 ]

3 голосов
/ 27 июня 2019

C ++ 2a, хотя предполагается, что он станет стандартом C ++ 20., еще не существует.

Помимо этого, в то время как в текущем проекте применяется представление с двумя дополнениями дляцелые числа со знаком, текущий стандарт (C ++ 17) и все прекурсоры ограничивают выбор :
В частности, предлагаются следующие варианты: представление величины со знаком и единиц 'дополнение .Обе функции отрицательный ноль .

Имеется информация о диапазоне N-разрядных целых чисел со знаком.В частности, что не все из этих N 1 битов представления объекта должны быть частью N 2 битов представления значения, с исключением узкоготипы символов .Таким образом, ширина N-битного представления значения может быть меньше.Учитывая принцип pigeonhole , неудивительно, что он не может быть больше.

Предположение, что двоичные биты глубоко внедрены в язык, так же, как оно пронизывает многие другие языки программирования.Изменение этого было бы крупным проектом.

3 голосов
/ 27 июня 2019

В настоящее время нет окончательного стандарта C ++ 20. предложение , о котором вы, вероятно, думаете, это P1236, и оно говорит:

Диапазон представляемых значений для целочисленного типа со знаком составляет от -2 ^ (N-1) до2 ^ (N-1) -1 (включительно), где N называется показателем диапазона типа.

Это и максимум, и минимум.Поскольку предложение требует дополнения до двух для целых чисел со знаком, нет возможности для изменения.Тривиально, N битов нельзя использовать для представления более 2 ^ N различных значений (по принципу голубя), поэтому этот диапазон настолько велик, насколько это возможно, даже если он был задан только как минимальный диапазон.

Что касается битов с тремя состояниями, они не работают с языком.

...