Я читаю открытый исходный код (C ++) и не могу понять, почему они поместили 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
};

Думаю, это не просто обычное целое перечисление, но что это такое? может ли это быть шестнадцатеричное число, начинающееся с «0x»?

23
задан Yu Hao 24 July 2013 в 02:14
поделиться

4 ответа

Эти числа являются восьмеричными константами. (Числа, начинающиеся с 0, но не с 0x, рассматриваются в base-8).

Таким образом, -021 == -17, -020 = -16 и т. Д.

40
ответ дан 29 November 2019 в 00:48
поделиться

Это восьмеричные литералы, и поэтому они начинаются с 0.

Что более интересно & amp; Реальный вопрос для меня:
Зачем использовать октальные литералы в качестве значений перечисления?

Вероятно, потому что каждый бит этих восьмеричных литералов указывает на что-то. Трудно понять, что, просто увидев перечисление и отсутствие контекста, где он используется, но вам нужно подумать об этом в этом направлении, и, возможно, это будет иметь для вас больше смысла.

21
ответ дан 29 November 2019 в 00:48
поделиться

Это 8-значные ( Редактировать: слово восьмеричное :)) числа.

4
ответ дан 29 November 2019 в 00:48
поделиться

a) Литеральные константы, начинающиеся с 0, являются восьмеричными (цифры от 0 до 7)
b) Фактические числа допускают некоторую арифметику, например, N = 10 + 2 * (E = 1) = 12 ( NEE).

Но так как NE> N & amp; NW> N, оно не отражает направление в круге, поэтому оно, возможно, имеет ограниченную помощь, как слово «SquareDelta» для меня. Возможно, это имеет больше смысла в контексте.

1
ответ дан 29 November 2019 в 00:48
поделиться