Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ I';我正在阅读开源代码(C+;+;)和can';我不明白他们为什么这样使用enum_C++_C_Enums - Fatal编程技术网

C++ I';我正在阅读开源代码(C+;+;)和can';我不明白他们为什么这样使用enum

C++ I';我正在阅读开源代码(C+;+;)和can';我不明白他们为什么这样使用enum,c++,c,enums,C++,C,Enums,我发现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_

我发现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”开头的十六进制数字吗?

这些是基于8的(编辑:单词是八进制:)数字


那些数字是八进制常数。(以
0
开头但不以
0x
开头的数字在基数-8中考虑)


因此,-021==-17,-020=-16,等等。前导零使它们以8为基数。e、 g.021=17这些是八进制文字,因此它们以0开头

对我来说,更有趣和真实的问题是:
为什么使用八进制文字作为枚举值?

可能,因为这些八进制文字的每一位都表示某种东西。仅仅通过查看枚举而不考虑使用它的上下文,很难理解它是什么,但您需要从这个方向考虑它,也许它会对您更有意义。

a)从0开始的文字常量是八进制(从0到7的数字)
b) 实际数字允许一些算术运算,如N=10+2*(E=1)=12(NEE)

但是由于NE>N&&NW>N,它不能反映圆中的方向,所以它可能帮助有限,就像我用的“squaredta”这个词一样。也许,这在上下文中更有意义。

其他“答案”回答了您的问题,但我添加这些是为了提供信息

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,  
 };
同样,用二进制(两个恭维词):

因此,E/W坐标是
squaredta&7
,N/S坐标是
squaredta&070+squaredta&4


经进一步审查,他们似乎打算将最低有效八进制数字的范围从-2到2表示W/E-ness,将下一个八进制数字的范围从-2到2表示N/S-ness。如果添加
DELTA_W+DELTA_W+DELTA_N
并截断为两个八进制数字,则得到006,
DELTA_NWW
的值。由于最不重要的八进制会影响上八进制,因此delta仅限于正负两个。

不需要。你的答案不完整
0x20
不是八进制数,但它以
0
开头。基本概念似乎是使用三位(一个八进制是3位,与位数无关)来跟踪南北方向的距离,使用三位来跟踪东西方向的距离。NNE=N+N+E=010+010+001。SWW=S+W+W=-010+-001+-001。我会猜到,两个赞美词中的否定词会让用法更加混乱。@moing Duck:Yay解密技巧!我猜不是,最低的3位是E/W,但接下来的3位只是模糊地对应于N/S。哦,不!!,他们没有在项目中对此发表任何评论。。这太可悲了:(+1,因为这些数字背后可能有一个隐藏的属性。正如你所说的。它是以这种方式进行位运算的。@Oreo23:Happy可能会有所帮助。你能详细介绍一下Q本身中的位用法吗?这很有趣,也会帮助其他可能陷入同样/类似疑问的用户。这些看起来像弧度t哦,我。
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,  
 };