开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

楼主: 千狐
收起左侧

[已解决] 请教各位大佬,超过20位的长整数怎么右移?

 关闭 [复制链接]

结帖率:98% (54/55)
发表于 2023-1-23 13:58:30 | 显示全部楼层   福建省宁德市
千狐 发表于 2023-1-23 08:56
我按照你的实现代码测试了下计算结果还是错的 不知道是右移有问题 还是 % 有问题

.版本 2

看右移的算法是没有错的  求余数更不会错了
QQ截图20230123135725.png
回复

使用道具 举报

发表于 2023-1-23 14:04:43 | 显示全部楼层   陕西省西安市
千狐 发表于 2023-1-23 00:31
肯定对✓   右移22位 然后百分比2 得到1   能算出0的基本都是因为数值超过20位导致的 我用百du的在线计算 ...

我来说说我的见解,当然不一定对,只是猜测
unsigned long long 在32位和64位编译器中都是占八个字节 那么它的范围就是0~18446744073709551615UL
而你的数是16827111275793860813,很显然是在范围内的
16827111275793860813的二进制无符号在计算机中就是1110100110000101111010001000110100101101101010011100100000000000
对于无符号整数右移22位就是左边空出的位补零,右边移除的位丢弃。
结果是0000000000000000000000111010011000010111101000100011010010110110
也就是10进制的4011895960758,这时候我们在模2,答案很显然为0.
但是你说服务器返回的是1,那么说明服务器是以有符号整形来存储的,而long long的取值范围为-9223372036854775808L~9223372036854775807LL
很显然你的数并不在范围内,在c语言中有一个比较特殊的情况是当左移或右移移的位数超过该数值类型的最大位数时,编译器会用左移或右移的位数去模类型的最大位数,然后按余数进行移位
你右移22位很显然超过了最大位数,所有编译器用22模20得到余数2,所以16827111275793860813右移2位得到4206777818948465000
显然这个数模2答案是1

点评

4206777818948465000模2的结果不也是0怎么是1   广东省深圳市  发表于 2023-1-23 16:08
回复

使用道具 举报

结帖率:98% (54/55)

签到天数: 16 天

发表于 2023-1-23 14:04:49 | 显示全部楼层   福建省宁德市
千狐 发表于 2023-1-23 04:28
Python压根没有这个问题,官方给出的计算公式就是那一行代码,我复制到易语言执行失败后,先是测试了3个 ...

QQ截图20230123140338.png
回复

使用道具 举报

结帖率:44% (4/9)

签到天数: 1 天

 楼主| 发表于 2023-1-23 15:23:21 高大上手机用户 | 显示全部楼层   福建省泉州市
鹏书 发表于 2023-1-23 13:58
看右移的算法是没有错的  求余数更不会错了

整数不会错 但我这传入的是20位数
回复

使用道具 举报

结帖率:44% (4/9)

签到天数: 1 天

 楼主| 发表于 2023-1-23 15:24:03 高大上手机用户 | 显示全部楼层   福建省泉州市
鹏书 发表于 2023-1-23 13:52
很简单的一个问,你拿一个小一点的数来计算对比一下就知道 要么就是你算法有问题,要么就是官方官方算法 ...

小一点的数没问题
回复

使用道具 举报

结帖率:44% (4/9)

签到天数: 1 天

 楼主| 发表于 2023-1-23 15:25:43 高大上手机用户 | 显示全部楼层   福建省泉州市
Visitors 发表于 2023-1-23 14:04
我来说说我的见解,当然不一定对,只是猜测
unsigned long long 在32位和64位编译器中都是占八个字节 那 ...

那咋办?虽然你说的每个字我都理解 但如何解决就不会了!易语言该怎么算?呢╭(╯ε╰)╮
回复

使用道具 举报

结帖率:98% (54/55)

签到天数: 16 天

发表于 2023-1-23 15:34:58 | 显示全部楼层   福建省宁德市
千狐 发表于 2023-1-23 15:23
整数不会错 但我这传入的是20位数

你没看见我输入的就是你提供的数字吗
回复

使用道具 举报

结帖率:98% (45/46)
发表于 2023-1-23 15:58:10 | 显示全部楼层   广东省东莞市
能不能使用 文本+模拟 进行计算
回复

使用道具 举报

结帖率:44% (4/9)

签到天数: 1 天

 楼主| 发表于 2023-1-23 16:02:08 高大上手机用户 | 显示全部楼层   福建省泉州市
鹏书 发表于 2023-1-23 14:04

32楼的说法:有符号导致 我觉得挺有道理的
回复

使用道具 举报

结帖率:44% (4/9)

签到天数: 1 天

 楼主| 发表于 2023-1-23 16:02:42 高大上手机用户 | 显示全部楼层   福建省泉州市
豪豪豪111 发表于 2023-1-23 15:58
能不能使用 文本+模拟 进行计算

不知道 因为我还不会写文本型右移
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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