开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 320|回复: 15
打印 上一主题 下一主题
收起左侧

[已解决] int 64 益出 万年难题

 关闭 [复制链接]
结帖率:88% (22/25)
跳转到指定楼层
楼主
发表于 2025-4-19 07:26:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式   湖南省株洲市
13精币
一个c++的代码,转易语言的,转到一半的时候突然发现是个int64 到了20位就益出为负数了,看看有没有大神可以修复的, 测试.e (8.06 KB, 下载次数: 7)
这是C++代码




最佳答案

查看完整内容

易语言本身就不支持无符号类型,所以涉及无符号类型的各种运算均无法通过其自身完美解决,你只能另辟蹊径,要么调用dll,要么就使用置入代码。 下面是我给你写的,用的也是置入代码: [e=1].版本 2 .支持库 spec .子程序 HashString_ASM, 长整数型 .参数 输入字符串, 文本型 .参数 类型, 整数型 置入代码 ({ 49, 201, 186, 1, 0, 16, 0, 190, 171, 170, 42, 0, 129, 236, 20, 20, 0, 0, 141, 185, 0, 5, 0, 0, 137, 203, 107, 19 ...

点评

长整数 长整数 长整数   贵州省毕节市  发表于 2025-4-19 08:31

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳

结帖率:100% (1/1)
沙发
发表于 2025-4-19 07:26:11 | 只看该作者   浙江省温州市
易语言本身就不支持无符号类型,所以涉及无符号类型的各种运算均无法通过其自身完美解决,你只能另辟蹊径,要么调用dll,要么就使用置入代码。
下面是我给你写的,用的也是置入代码:
  
子程序名返回值类型公开备 注
HashString_ASM长整数型 
参数名类 型参考可空数组备 注
输入字符串文本型
类型整数型
置入代码 ({ 49, 201, 186, 1, 0, 16, 0, 190, 171, 170, 42, 0, 129, 236, 20, 20, 0, 0, 141, 185, 0, 5, 0, 0, 137, 203, 107, 194, 125, 131, 192, 3, 153, 247, 254, 107, 194, 125, 131, 192, 3, 153, 247, 254, 15, 183, 194, 137, 132, 157, 240, 235, 255, 255, 129, 195, 0, 1, 0, 0, 57, 251, 117, 218, 65, 129, 249, 0, 1, 0, 0, 117, 201, 139, 69, 12, 185, 238, 238, 238, 238, 49, 219, 190, 237, 127, 237, 127, 49, 255, 193, 224, 8, 137, 133, 232, 235, 255, 255, 139, 69, 8, 139, 0, 128, 56, 0, 137, 133, 236, 235, 255, 255, 15, 132, 141, 0, 0, 0, 139, 133, 236, 235, 255, 255, 141, 80, 1, 139, 69, 8, 137, 16, 139, 133, 236, 235, 255, 255, 15, 190, 0, 137, 133, 236, 235, 255, 255, 131, 232, 97, 131, 248, 25, 119, 7, 131, 173, 236, 235, 255, 255, 32, 137, 240, 137, 250, 1, 200, 17, 218, 137, 133, 224, 235, 255, 255, 139, 133, 232, 235, 255, 255, 3, 133, 236, 235, 255, 255, 137, 149, 228, 235, 255, 255, 139, 189, 228, 235, 255, 255, 137, 194, 139, 133, 224, 235, 255, 255, 51, 132, 149, 240, 235, 255, 255, 137, 218, 137, 198, 137, 200, 15, 164, 194, 5, 193, 224, 5, 131, 192, 3, 131, 210, 0, 1, 200, 139, 141, 236, 235, 255, 255, 17, 218, 49, 219, 1, 193, 17, 211, 1, 241, 17, 251, 233, 95, 255, 255, 255, 137, 240, 137, 250, 201, 194, 8, 0 })
' xor ecx, ecx
' mov edx, 1048577
' mov esi, 2796203
' sub esp, 5140
' L2:
' lea edi, [ecx+1280]
' mov ebx, ecx
' L3:
' imul eax, edx, 125
' add eax, 3
' cdq
' idiv esi
' imul eax, edx, 125
' add eax, 3
' cdq
' idiv esi
' movzx eax, dx
' mov DWORD PTR [ebp-5136+ebx*4], eax
' add ebx, 256
' cmp ebx, edi
' jne L3
' inc ecx
' cmp ecx, 256
' jne L2
' mov eax, DWORD PTR [ebp+12]
' mov ecx, -286331154
' xor ebx, ebx
' mov esi, 2146271213
' xor edi, edi
' sal eax, 8
' mov DWORD PTR [ebp-5144], eax
' L4:
' mov eax, DWORD PTR [ebp+8]
' mov eax, DWORD PTR [eax]
' cmp BYTE PTR [eax], 0
' mov DWORD PTR [ebp-5140], eax
' je L11
' mov eax, DWORD PTR [ebp-5140]
' lea edx, [eax+1]
' mov eax, DWORD PTR [ebp+8]
' mov DWORD PTR [eax], edx
' mov eax, DWORD PTR [ebp-5140]
' movsx eax, BYTE PTR [eax]
' mov DWORD PTR [ebp-5140], eax
' sub eax, 97
' cmp eax, 25
' ja L5
' sub DWORD PTR [ebp-5140], 32
' L5:
' mov eax, esi
' mov edx, edi
' add eax, ecx
' adc edx, ebx
' mov DWORD PTR [ebp-5152], eax
' mov eax, DWORD PTR [ebp-5144]
' add eax, DWORD PTR [ebp-5140]
' mov DWORD PTR [ebp-5148], edx
' mov edi, DWORD PTR [ebp-5148]
' mov edx, eax
' mov eax, DWORD PTR [ebp-5152]
' xor eax, DWORD PTR [ebp-5136+edx*4]
' mov edx, ebx
' mov esi, eax
' mov eax, ecx
' shld edx, eax, 5
' sal eax, 5
' add eax, 3
' adc edx, 0
' add eax, ecx
' mov ecx, DWORD PTR [ebp-5140]
' adc edx, ebx
' xor ebx, ebx
' add ecx, eax
' adc ebx, edx
' add ecx, esi
' adc ebx, edi
' jmp L4
' L11:
' mov eax, esi
' mov edx, edi
' leave
' ret 8
返回 (0)
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
变量名类 型静态数组备 注
长整数结果长整数型 
整数结果整数型 
长整数结果 = HashString_ASM (“monstereffex4\006\00604.tex”, 1)
整数结果 = 长整数结果  ' 到整数 (HashString_ASM (“monstereffex4\006\00604.tex”, 1))
调试输出 (长整数结果, 整数结果)
返回 (0)  ' 可以根据您的需要返回任意数值



i支持库列表   支持库注释   
spec特殊功能支持库

评分

参与人数 1荣誉 +1 收起 理由
笨潴 + 1 热心帮助他人,荣誉+1,希望继续努力(*^__^*) 嘻嘻!

查看全部评分

回复

使用道具 举报

签到天数: 6 天

板凳
发表于 2025-4-19 08:07:33 | 只看该作者   浙江省金华市
都说是万年难题了  咱们解决不了
回复

使用道具 举报

结帖率:50% (1/2)

签到天数: 10 天

地板
发表于 2025-4-19 08:10:21 | 只看该作者   广西壮族自治区贵港市
又不影响上面这个算法的计算
回复

使用道具 举报

结帖率:88% (22/25)

签到天数: 4 天

地下
 楼主| 发表于 2025-4-19 08:30:02 | 只看该作者   湖南省株洲市
wlp 发表于 2025-4-19 08:10
又不影响上面这个算法的计算

影响,这样结果完全是错的
回复

使用道具 举报

结帖率:88% (22/25)

签到天数: 4 天

6
 楼主| 发表于 2025-4-19 08:30:58 | 只看该作者   湖南省株洲市
嫂子 发表于 2025-4-19 08:07
都说是万年难题了  咱们解决不了

我完全出于好奇心,目前在用C编译的dll调用的
回复

使用道具 举报

结帖率:83% (10/12)

签到天数: 1 天

7
发表于 2025-4-19 09:20:26 | 只看该作者   重庆市重庆市
还不如直接扣汇编代码,直接完成
回复

使用道具 举报

结帖率:50% (1/2)

签到天数: 10 天

8
发表于 2025-4-19 09:22:05 | 只看该作者   广西壮族自治区贵港市
nj20346 发表于 2025-4-19 08:30
影响,这样结果完全是错的

结果应该是对的,只用到了加减,位异或,左移,如果是右移,结果就不对
回复

使用道具 举报

结帖率:88% (22/25)

签到天数: 4 天

9
 楼主| 发表于 2025-4-19 09:48:14 | 只看该作者   湖南省株洲市
SYzenghao 发表于 2025-4-19 09:20
还不如直接扣汇编代码,直接完成

没学,不会
回复

使用道具 举报

结帖率:88% (22/25)

签到天数: 4 天

10
 楼主| 发表于 2025-4-19 09:57:01 | 只看该作者   湖南省株洲市
wlp 发表于 2025-4-19 09:22
结果应该是对的,只用到了加减,位异或,左移,如果是右移,结果就不对 ...

* 77 | “seed2:138439896331”
* 79 | “seed2:4713111365160”
* 78 | “seed2:160390381207298”
* 83 | “seed2:5458130667211700”
* 84 | “seed2:185741690772577792”
* 69 | “seed2:6320840865022251008”
* 82 | “seed2:-9223372036854775808”
* 69 | “seed2:-9223372036854775808”
* 70 | “seed2:-9223372036854775808”
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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