gpt4 book ai didi

c - C语言枚举声明中的十六进制表达式0x80000000是什么意思

转载 作者:太空宇宙 更新时间:2023-11-04 00:39:11 24 4
gpt4 key购买 nike

我正在阅读 iPhone 示例项目(Xcode IDE、Apple LLVM 编译器 4.2)的代码。在该 iPhone 示例项目的外部库(用 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 调试器中检查,编译器是 Apple LLVM 编译器 4.2,EVENT_EXIT 等于 (int) -2147483648EVENT_RELEASE_TOUCH等于 (int) -2147483645 等等。

显然,他们在 two's complement 中接受了治疗表示。可以找到相关帖子 here .

但我现在不确定的是这些:

(1) 0x80000000 的底层数据类型总是int 或者其他情况下的其他类型?这取决于编译器或平台吗?

(2) 如果我像这样将一个十六进制值赋给一个带符号的整数,它是否总是被解释为二进制补码表示?这取决于编译器或平台吗?可以找到相关帖子here .可以找到另一个引用 here .

请分享一些想法。谢谢大家:D

最佳答案

与类 C 语言中的许多东西一样,枚举只是一个整数。像这样设置第一个值将导致编译器从那里递增,保证所有枚举值都小于 0。(作为 2s 补码的有符号整数,设置的高位将指示负数)

很可能,程序员选择这个值是为了能够发送各种事件,并且不应该与其他事件发生冲突。

简而言之,不要担心实际值;这只是一个数字。使用名称并理解它在使用或返回这些代码的调用上下文中的含义。

关于c - C语言枚举声明中的十六进制表达式0x80000000是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16160342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com