开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 3459|回复: 16
收起左侧

[图文资料] 易语言变量详解-第三课:深入整数变量

[复制链接]
发表于 2014-6-19 21:04:22 | 显示全部楼层 |阅读模式   四川省南充市
首先让我们来看一段代码:

  
子程序名返回值类型公开备 注
测试  
变量名类 型静态数组备 注
a整数型 
a = 0
判断循环首 (a ≥ 0)
a = a + 1
判断循环尾 ()

请问上面的代码是一段死循环吗?为什么?









想好了再往下看答案~
如果你确定你能回答出为什么那么我想你已经不需要看这一课了
因为这一课的重点就是这个
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.


评分

参与人数 1好评 +1 精币 +3 收起 理由
冰点 + 1 + 3 辛苦。、、加分

查看全部评分


 楼主| 发表于 2014-6-19 21:13:00 | 显示全部楼层   四川省南充市
本帖最后由 不得不爱2 于 2014-6-19 22:10 编辑
  
子程序名返回值类型公开备 注
测试  
变量名类 型静态数组备 注
a整数型 
a = 0
判断循环首 (a ≥ 0)
a = a + 1
判断循环尾 ()
调试输出 (a)


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

开始运行被调试程序
* -2147483648
被调试易程序运行完毕


没错,这段代码并不是一段死循环...因为易语言中的整数变量是有符号整数变量。

先来讲解下有符号和无符号吧。

易语言的整数变量在内存中占4字节长度
为了方便表达我们先讲下16进制
11111111=255=FF
以后很多地方我都会选择十六进制,两位=一个字节。如果 FF FF,就是两个字节,等同于{255,255}

Ok,已知整数占的范围是4字节,取值范围也就是 00 00 00 00~FF FF FF FF
我们像字节集那样转换成整数看看...
00 00 00 00=0
FF FF FF FF=4294967295
所以无符号整数变量的取值范围应该是0~4294967295。
不过我说的是无符号...易语言的整数型变量是有符号的....
什么是有符号呢?就是有符号-,可以表示负数的变量类型。
在易语言中,负数是这样存储的
10000000 00000000 00000000 00000000
这是一个长度为四字节的二进制数,当最前面哪位是1的时候说明是负数,反之则说明是正数。
所以易语言整数变量的取值范围是 -2147483648~2147483647
接下来为了验证想法我将多次使用进制转换,因为是直接用的模块,具体代码请见精易模块源码什么的


  
子程序名返回值类型公开备 注
测试  
变量名类 型静态数组备 注
a整数型 
调试输出 (进制_十到二 (2147483647), 取文本长度 (进制_十到二 (2147483647)))
调试输出 (进制_二到十 (“1”取重复文本 (31, “0”)))


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


开始运行被调试程序
* “1111111111111111111111111111111” | 31
* -2147483648
被调试易程序运行完毕

可以看到,数据上限如果转换成二进制是31个1,也就是3×8+7个。剩下的一位1用来决定是正数还是负数。
当再次+1的时候就会导致进位,变成了1+31个0.地一位变成了1,结果为负数,模块转换后值是-2147483648,与第一幅图片里调试输出的结果相同。

这就是为什么第一个图片里的例子不是死循环的原因。

回到我们上一课的一个问题:为何字节集变量存储数据不能超过4GB。
我们来看下可以存储的最大字节数,整数变量(假设是无符号的)最大值是4294967295
4294967295字节=4194304KB=4096MB=4GB
PS:上面计算的是四舍五入的结果,真实结果是3.999999999068677...GB

回复 支持 反对

使用道具 举报

结帖率:86% (6/7)

签到天数: 10 天

发表于 2014-6-19 23:02:26 | 显示全部楼层   四川省成都市
不得不爱2 发表于 2014-6-19 22:57
那是,特别是易语言 汇编,那就是特别的应该知道变量是怎么传值和传址的,否则你写的汇编指令就会出错

其它都不敢想 一步一步 一门一门学好就不错了 什么C语言 学习起来比易语言困难的多 但是觉得现在易语言已经跟不上节奏了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-19 22:57:10 | 显示全部楼层   四川省南充市
沐紫萌 发表于 2014-6-19 22:53
已经很努力了 现在走哪学都不知道  原来变量挺复杂的 要做大的东西必须要掌握这些  不然出错都不知道在哪

那是,特别是易语言 汇编,那就是特别的应该知道变量是怎么传值和传址的,否则你写的汇编指令就会出错
回复 支持 反对

使用道具 举报

结帖率:86% (6/7)

签到天数: 10 天

发表于 2014-6-19 22:53:17 | 显示全部楼层   四川省成都市
不得不爱2 发表于 2014-6-19 22:47
嗯,多看多实验,很多不会的都会了,

已经很努力了 现在走哪学都不知道  原来变量挺复杂的 要做大的东西必须要掌握这些  不然出错都不知道在哪
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-19 22:47:48 | 显示全部楼层   四川省南充市
沐紫萌 发表于 2014-6-19 22:43
噢 说错了 说错了 那是负数了 自然就跳出循环了- - 哎脑子转不过弯弯

嗯,多看多实验,很多不会的都会了,
回复 支持 反对

使用道具 举报

结帖率:86% (6/7)

签到天数: 10 天

发表于 2014-6-19 22:43:52 | 显示全部楼层   四川省成都市
不得不爱2 发表于 2014-6-19 22:38
不可能啊,你怎么看出来的

噢 说错了 说错了 那是负数了 自然就跳出循环了- - 哎脑子转不过弯弯
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-19 22:38:28 | 显示全部楼层   四川省南充市
沐紫萌 发表于 2014-6-19 22:34
真是奇怪-2147483647竟然=0

不可能啊,你怎么看出来的
回复 支持 反对

使用道具 举报

结帖率:86% (6/7)

签到天数: 10 天

发表于 2014-6-19 22:34:39 | 显示全部楼层   四川省成都市
不得不爱2 发表于 2014-6-19 22:27
唉,易语言里面的整数是有符号的, 整数 -2,147,483,648 到 2,147,483,647 超过2,147,483,647 就变成了 -2, ...

真是奇怪-2147483647竟然=0
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-19 22:27:04 | 显示全部楼层   四川省南充市

唉,易语言里面的整数是有符号的, 整数 -2,147,483,648 到 2,147,483,647 超过2,147,483,647 就变成了 -2,147,483,648    (2,147,483,647+1=-2,147,483,648,有点奇怪吧,因为-2,147,483,648小于0所以就退出了循环,也就是说那个看起来像是死循环的循环其实不是死循环)
回复 支持 反对

使用道具 举报

结帖率:86% (6/7)

签到天数: 10 天

发表于 2014-6-19 22:21:06 | 显示全部楼层   四川省成都市
我果断看不懂
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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