c语言里的负数用16进制表示什么,什么是十六进制表达式0x80000000在C语言的枚举声明中的含义...

我正在阅读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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值