黑马程序员技术交流社区

标题: 关于枚举 [打印本页]

作者: 于清扬    时间: 2014-3-31 14:36
标题: 关于枚举
本帖最后由 于清扬 于 2014-4-3 17:23 编辑

看资料看到代码中定义了这段枚举,
typedef enum {
    SUGGESTTYPE_STATION = 0X40,
    SUGGESTTYPE_ROUTE,
    SUGGESTTYPE_POI_START,
    SUGGESTTYPE_POI_END,
    SUGGESTTYPE_ROUTE_HISTORY,
    SUGGESTTYPE_STATION_HISTORY,
}SUGGESTTYPE

我逐个打印了下,
NSLog(@"%d",SUGGESTTYPE_STATION);
    NSLog(@"%d",SUGGESTTYPE_ROUTE);
    NSLog(@"%d",SUGGESTTYPE_POI_START);
    NSLog(@"%d",SUGGESTTYPE_POI_END);
    NSLog(@"%d",SUGGESTTYPE_ROUTE_HISTORY);
    NSLog(@"%d",SUGGESTTYPE_STATION_HISTORY);
为什么结果是
2014-03-31 13:40:39.509 1111[802:60b] 64
2014-03-31 13:40:39.511 1111[802:60b] 65
2014-03-31 13:40:39.512 1111[802:60b] 66
2014-03-31 13:40:39.513 1111[802:60b] 67
2014-03-31 13:40:39.514 1111[802:60b] 68
2014-03-31 13:40:39.515 1111[802:60b] 69

枚举不特别说明的话是从0开始的,这个0X40是怎么算得,为什么是从64开始的。。。????

作者: 周宇华    时间: 2014-3-31 14:53
枚举不特别说明的话是从0开始的;但是也可以给它赋一个初始值的。如:
  1. typedef enum {
  2.     ErrorStatusNull = -1, // -1
  3.     ErrorStatusIp, // 0
  4.     ErrorStatusServer = 404, // 404
  5.     ErrorStatusServerip, //405
  6.     ErrorStatusEnd // 406
  7. }ErrorStatus
复制代码

作者: 脸皮猴    时间: 2014-3-31 15:03
枚举的元素在没有指定值的枚举元素,其值为前一元素加1。假如第一个没有定义,那么第一个默认就是0,第二个值默认就是1.假如第一个指定了是7,那么么第二个值就是8.
  1. enum number{
  2.     AA,
  3.     aa,
  4.     BB = 4,
  5.     bb,
  6.     CC = 2,
  7.     cc
  8.    
  9. };

  10.         NSLog(@"%d",AA);
  11.         NSLog(@"%d",aa);
  12.         NSLog(@"%d",BB);
  13.         NSLog(@"%d",bb);
  14.         NSLog(@"%d",CC);
  15.         NSLog(@"%d",cc);
复制代码


上面的代码打印结果:
0
1
4
5
2
3
这个解释能明白了吗?
作者: 于清扬    时间: 2014-3-31 15:03
周宇华 发表于 2014-3-31 14:53
枚举不特别说明的话是从0开始的;但是也可以给它赋一个初始值的。如:

是从0开始,但是加上0x40后打印出来的为什么从64开始
作者: 于清扬    时间: 2014-3-31 15:09
脸皮猴 发表于 2014-3-31 15:03
枚举的元素在没有指定值的枚举元素,其值为前一元素加1。假如第一个没有定义,那么第一个默认就是0,第二个 ...

你说的我知道啊 ,能说下上面为什么第一个是64吗??
作者: 脸皮猴    时间: 2014-3-31 15:22
于清扬 发表于 2014-3-31 15:09
你说的我知道啊 ,能说下上面为什么第一个是64吗??

是定义的啊,就是可以枚举也可以自己指定值的啊0x40是16进制的表示方法  就是10进制的64啊
作者: agelessman    时间: 2014-3-31 15:40
0x40计算机认为是16制的,你输出用的是%d,是十进制的,所以打出来就是64了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2