[英]I'm reading open source code (C++) and can't figure out why they put enum this way
我發現 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
的數字在 base-8 中被考慮)。
因此,-021 == -17、-020 = -16 等。
這些是八進制文字,因此它們以 0 開頭。
對我來說更有趣和更真實的問題是:
為什么使用八進制文字作為枚舉值?
可能是因為這些八進制文字的每一位都表示某種東西。 僅通過查看枚舉並且沒有使用它的上下文很難弄清楚是什么,但是您需要朝那個方向考慮它,也許它對您來說更有意義。
其他“答案”回答了你的問題,但我添加這個是為了提供信息。
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-性。 如果添加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”這個詞一樣。 也許,它在上下文中更有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.