Почему минимальное значение int 1 дальше от нуля, чем положительное значение?

Я хочу знать, почему int, double etc имеют на 1 отрицательное значение больше положительного.

3 ответов


в двух словах: 0 должен где-то поместиться, это в положительных, что делает их на один меньше, чем отрицательные.

Пример: 5 слотов для негативов и 5 для позитивов, негативы получают от -1 до -5, позитивы получают от 0 до 4

  • не забудьте прочитать @ chris link:)

Как указал @WhozCraig, это справедливо только для архитектур, которые используют дополняющее представление двоичных чисел со знаком.


предположим, что у вас есть целочисленный тип данных, который использует 4 бита. С ними можно представить 16 возможных целых чисел со знаком. Целочисленные положительные значения присваиваются первой половине диапазона:

0000b = 0
0001b = 1
0010b = 2
0011b = 3
0100b = 4
0101b = 5
0110b = 6
0111b = 7

для второй половины, есть два варианта:

  1. сопоставьте 8 позиций с целыми числами -1 to -7 и специальное значение -0. Это используется дополнения и знак и величина представление чисел.
  2. сопоставьте 8 позиций с целыми числами -1 to -8. Это используется два дополнения представления С которым большинство программистов знакомы (и тот, о котором вы говорите).

отрицательные числа отображаются так:

1000b = -8
1001b = -7
1010b = -6
1011b = -5
1100b = -4
1101b = -3
1110b = -2
1111b = -1

хотя это может не иметь смысла, это отображение делает его легко выполнять арифметические операции.


это не относится к поплавкам; они представлены по-разному. Большинство представлений с плавающей запятой имеют равный диапазон по обе стороны от +0/-0.


для C не гарантируется, что вы будете работать на машине с двумя дополняющими арифметическими аппаратными средствами (один более отрицательный, чем положительный). На самом деле, возможно, так и будет.