Ответ 1
Эти числа являются восьмеричными константами. (Числа, начинающиеся с 0
, но не 0x
, рассматриваются в базе-8).
Таким образом, -021 == -17, -020 = -16 и т.д.
Я обнаружил, что enum определяется таким образом и не может понять, почему они помещают туда ведущий ноль.
enum SquareDelta {
DELTA_SSW = -021,
DELTA_SS = -020,
DELTA_SSE = -017,
DELTA_SWW = -012,
DELTA_SW = -011,
DELTA_S = -010,
DELTA_SE = -07,
DELTA_SEE = -06,
DELTA_W = -01,
DELTA_ZERO = 0,
DELTA_E = 01,
DELTA_NWW = 06,
DELTA_NW = 07,
DELTA_N = 010,
DELTA_NE = 011,
DELTA_NEE = 012,
DELTA_NNW = 017,
DELTA_NN = 020,
DELTA_NNE = 021
};
Я предполагаю, что это не просто нормальный int enum, но что это? может ли он быть в шестнадцатеричном виде, начиная с "0x"?
Эти числа являются восьмеричными константами. (Числа, начинающиеся с 0
, но не 0x
, рассматриваются в базе-8).
Таким образом, -021 == -17, -020 = -16 и т.д.
Это октальные литералы, и поэтому они начинаются с 0.
Что более интересно и актуально. Вопрос для меня:
Зачем использовать символы Octal в качестве значений enum?
Возможно, потому что каждый бит этих восьмеричных литералов свидетельствует о чем-то. Трудно понять, что, просто увидев перечисление и контекст, где он используется, но вам нужно подумать об этом в этом направлении, и, возможно, это будет иметь для вас больше смысла.
Другие ответы отвечают на ваш вопрос, но я добавляю это в информационных целях.
enum SquareDelta {
DELTA_NNW= 017,DELTA_NN = 020,DELTA_NNE= 021
DELTA_NWW= 006,DELTA_NW = 007,DELTA_N = 010,DELTA_NE = 011,DELTA_NEE= 012,
DELTA_W =-001,DELTA_ZER= 000,DELTA_E = 001,
DELTA_SWW=-012,DELTA_SW =-011,DELTA_S =-010,DELTA_SE =-007,DELTA_SEE=-006,
DELTA_SSW=-021,DELTA_SS =-020,DELTA_SSE=-017,
};
Опять же, в двоичном (два комплимента):
enum SquareDelta {
DELTA_NNW=001111,DELTA_NN =010000,DELTA_NNE=010001
DELTA_NWW=000110,DELTA_NW =000111,DELTA_N =001000,DELTA_NE =001001,DELTA_NEE=001010,
DELTA_W =111111,DELTA_ZER=000000,DELTA_E =000001,
DELTA_SWW=110110,DELTA_SW =110111,DELTA_S =111000,DELTA_SE =111001,DELTA_SEE=111010,
DELTA_SSW=101111,DELTA_SS =110000,DELTA_SSE=110001,
};
Итак, координата E/W SquareDelta&7
, а координата N/S SquareDelta&070+SquareDelta&4
.
При дальнейшем рассмотрении кажется, что они предназначены для наименьшей значащей восьмеричной цифры в масштабе от -2 до 2 для обозначения W/E-ness, а следующая восьмеричная цифра - от -2 до 2 до обозначают N/S-ness. Если вы добавите DELTA_W+DELTA_W+DELTA_N
и обрезаете до двух восьмеричных цифр, вы получите 006, значение DELTA_NWW
. Поскольку наименее значимые восьмеричные влияют на верхний, дельта ограничена плюс или минус два.
Это 8-основанные ( Изменить: слово восьмеричное:)).
Ведущий нуль делает их базовыми 8 числами. например 021 = 17
a) Литеральные константы, начиная с 0, являются восьмеричными (цифры от 0 до 7)
b) Фактические числа позволяют использовать некоторую арифметику, например N = 10 + 2 * (E = 1) = 12 (NEE).
Но так как NE > N && NW > N, он не отражает направление в круге, поэтому это может быть ограниченная помощь, например, слово "SquareDelta" для меня. Возможно, это имеет смысл в контексте.