如果我有以下枚举类型: typedef enum {Type1=0, Type2, Type3} EnumType;以及以下代码(如果转换成Java,这些代码将工作正常): NSArray *allTypes = [NSArray arrayWithObjects:[NSNumber numberWithInt:Type1], [NSNumber numberWithInt:Type2], [NSNumber numberWithInt:Type3], nil]; EnumType aType = -1; NSLog(@"aType is %d", aType); // I expect -1 // Trying to assign the highest type in the array to aType for (NSNumber *typeNum in allTypes) { EnumType type = [typeNum intValue]; NSLog(@"type is: %d", type); if (type > aType) { aType = type; } } NSLog(@"aType is %d", aType); // I expect 2结果日志是:TestEnums[11461:b303] aType is: -1TestEnums[11461:b303] type is: 0TestEnums[11461:b303] type is: 1TestEnums[11461:b303] type is: 2TestEnums[11461:b303] aType is: -1当我使用断点检查atype的值时,我看到:aType = (EnumType) 4294967295它是32位系统的最大无符号长整型值。这是否意味着我不能为在类型值的有效范围内?为什么日志值(-1)与实际值不同(4294967295)?是否与说明符%d有关?我怎么能在不增加新的键入以表示无效值?请注意,收藏可能有时是空的,这就是为什么我在开始使用-1来表示如果集合是空的,则没有类型。注:我是objective-c/ansi-c的新手。谢谢,莫塔编辑:这是我发现的奇怪的东西。如果我将循环中的条件更改为:if (type > aType || aType == -1)我得到以下日志:TestEnums[1980:b303] aType is -1TestEnums[1980:b303] type is: 0TestEnums[1980:b303] type is: 1TestEnums[1980:b303] type is: 2TestEnums[1980:b303] aType is 2这正是我要找的!奇怪的是(atype==-1)是怎么回事,而(type1>-1),(type2>-1)和(type3>-1)不是怎么回事?啊! 最佳答案 似乎EnumType被定义为unsigned类型。当您将它赋给-1时,该值实际上会回滚到无符号32位整数的最大可能值(如您所发现的那样)。因此,通过在cc上启动这个值,您确保没有其他的值可以比较高,因为它被分配到数据类型的最大值( >)。我建议在“cc>”启动计数器,因为它是-1的最低可能值。EnumType aType = 0;如果要检查是否选择了任何值,可以先检查集合的4294967295以查看是否有任何值。
10-08 05:30