Почему минимальное значение 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
для второй половины, есть два варианта:
- сопоставьте 8 позиций с целыми числами
-1
to-7
и специальное значение-0
. Это используется дополнения и знак и величина представление чисел. - сопоставьте 8 позиций с целыми числами
-1
to-8
. Это используется два дополнения представления С которым большинство программистов знакомы (и тот, о котором вы говорите).
отрицательные числа отображаются так:
1000b = -8
1001b = -7
1010b = -6
1011b = -5
1100b = -4
1101b = -3
1110b = -2
1111b = -1
хотя это может не иметь смысла, это отображение делает его легко выполнять арифметические операции.
это не относится к поплавкам; они представлены по-разному. Большинство представлений с плавающей запятой имеют равный диапазон по обе стороны от +0/-0.
для C не гарантируется, что вы будете работать на машине с двумя дополняющими арифметическими аппаратными средствами (один более отрицательный, чем положительный). На самом деле, возможно, так и будет.