yolanda yarita von solo sola sientes puedo porque muñequita musica milly lizeth lado estoy este entender contrabando cervezas amor c++ c enums

yarita - Estoy leyendo código de código abierto(C++) y no puedo entender por qué ponen enumeración de esta manera



yo no puedo entender porque estoy solo (6)

Encontré que la enumeración se define de esta manera y no puedo entender por qué pusieron el cero inicial allí.

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 };

Supongo que esto no es solo una int enum normal, pero ¿qué es? ¿Podría estar en un hex como el número que comienza con "0x"?


El cero inicial los hace base 8 números. por ejemplo, 021 = 17


Esos números son constantes octales. (Los números iniciales con 0 pero no 0x se consideran en base 8).

Por lo tanto, -021 == -17, -020 = -16, etc.


Esos son literales octales y por lo tanto comienzan con 0.

Lo que es más interesante y real para mí es:
¿Por qué usar los literales octales como valores de enumeración?

Probablemente, porque cada bit de esos literales octales es indicativo de algo. Es difícil distinguir qué, solo con ver la enumeración y no el contexto donde se está utilizando, pero debe pensarlo en esa dirección, y quizás tenga más sentido para usted.


Esos son números basados ​​en 8 ( Edición: la palabra es octal :)).


Las otras "respuestas" responden a su pregunta, pero estoy agregando esto con fines informativos.

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, };

De nuevo, en binario (dos complementos):

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, };

Así que la coordenada E / W es SquareDelta&7 , y la coordenada N / S es SquareDelta&070+SquareDelta&4 .

Tras una revisión adicional, parece que pretendían que el dígito octal menos significativo estuviera en una escala de -2 a 2 para indicar el W / E-ness, y el siguiente dígito octal para escalar de -2 a 2 para indicar el N / S-ness. Si agrega DELTA_W+DELTA_W+DELTA_N y trunca a dos dígitos octales, obtiene 006, el valor de DELTA_NWW . Como el octal menos significativo afecta al superior, los deltas están limitados a más o menos dos.


a) Constantes literales, comenzando con 0 son octales (dígitos del 0 al 7)
b) Los números reales permiten algunas aritméticas, como N = 10 + 2 * (E = 1) = 12 (NEE).

Pero desde NE> N && NW> N, no refleja una dirección en el círculo, por lo que es, quizás, de ayuda limitada, como la palabra ''SquareDelta'' para mí. Tal vez, tiene más sentido en contexto.