开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

12
返回列表 发新帖
楼主: chenyu2008
收起左侧

[已解决] 窗口_取句柄()得到负数句柄,居然还能正常使用,为什....

 关闭 [复制链接]
结帖率:50% (4/8)
 楼主| 发表于 昨天 21:44 | 显示全部楼层   浙江省嘉兴市
难怪 窗口_取句柄()  这个函数,返回错误是0 ,而不是 <0 原来如此。
回复

使用道具 举报

结帖率:50% (4/8)

签到天数: 4 天

 楼主| 发表于 昨天 21:48 | 显示全部楼层   浙江省嘉兴市
chenyu2008 发表于 2024-11-21 21:42
谢谢楼上的各位朋友,现在我明白为什么是负数 ,
但还是不明白,为什么这个错误的负数 ,系统能正常使用, ...

不知道是不是这样:
在 32 位系统中,窗口句柄通常是 32 位无符号整数。但在 64 位系统中,句柄通常被扩展为 64 位整数。负数句柄(如 -840300802)在内部可能是通过 符号扩展(sign extension)而得到的,这种扩展并不意味着它是无效的。事实上,它仍然是一个有效的句柄,且可以被操作系统识别和使用。

0xCDEA06FE 是一个十六进制的数值,在 32 位系统中它是 有效的句柄。
当这个句柄值被扩展到 64 位时,0xCDEA06FE 被转换为 -840300802,它仍然是一个有效的句柄,且操作系统在处理时能够正确识别。
因此,尽管你得到的是负数 -840300802,它代表的值实际上是 0xCDEA06FE,这两个数值在内存中的表示是相同的,而操作系统识别的是这个有效的句柄,而不是它的符号。
回复

使用道具 举报

结帖率:50% (4/8)

签到天数: 4 天

 楼主| 发表于 昨天 21:51 | 显示全部楼层   浙江省嘉兴市
-840300802 是一个 负数,它的二进制补码表示为 0xCDEA06FE。
负数通过 补码表示法 存储:取绝对值的二进制,取反并加 1。
在 32 位整数中,-840300802 就是 0xCDEA06FE,这两个值是等价的,只是表示方式不同。
由于 Windows 和许多其他操作系统使用补码表示法,负数和正数可以通过相同的二进制运算进行处理,因此 -840300802 和 0xCDEA06FE 表示同一个数字,操作系统能够识别并正确处理。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表