我正在阅读iPhone示例项目(Xcode IDE,Apple LLVM编译器4.2)的代码。在为iPhone样本项目的外部库(C语言编写)的头文件,有是在枚举类型中声明的一些事件:什么是十六进制表达式0x80000000在C语言的枚举声明中的含义
typedef enum _Application_Events
{
EVENT_EXIT = 0x80000000,
EVENT_TOUCH,
EVENT_DRAG,
EVENT_RELEASE_TOUCH,
EVENT_ROTATE_0,
EVENT_ROTATE_90,
EVENT_ROTATE_180,
EVENT_ROTATE_270
} Application_Events;
我不明白什么样的价值观被分配到这些事件。 0x80000000应该是一个很大的正整数(2147483648),或者是负零,或者是一个负整数(-2147483648)?
我在Xcode调试检查,与编译器是苹果LLVM编译器4.2中,EVENT_EXIT等于(int) -2147483648和EVENT_RELEASE_TOUCH等于(int) -2147483645等。
显然,他们在two's complement表示处理。相关帖子可以在here找到。
。但我不知道现在是这些:
(1)0x80000000的基本数据类型始终是int或在其他情况下,其他什么东西?这是依赖于编译器还是平台? (2)如果我将一个十六进制值赋给一个像这样的有符号整数,它是否总是被解释为二进制补码表示?这是依赖于编译器还是平台?相关文章可以在here找到。另可参考here。
请分享一些想法。谢谢大家:D
2013-04-23
Cong
+1
要回答后续问题:(1)它是平台相关的,每个其他答案都指向C规范。但它通常是一个整数。 (2)编译器会假设该数字是一个带符号的整数,除非通过转换或后缀指定类型。十六进制值本身既不是正数也不是负数,它们是位模式,因此如果设置了高位,则您的值将被视为负值,因此如果将其分配为带符号的类型,则该值为负值,但如果指定它变成一个无符号类型,它只会有你期望的自然价值。 –
2013-04-23 19:16:13