一段程序,请帮忙分析一下错误

bbkitty 2005-02-02 05:12:13
程序如下:
var
i:=Integer;
j:=Int64;
...
i:=high(integer);
j:=i+1;
请问此时j的值为-2147483648吗?为什么是这样?
...全文
100 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kshape 2005-02-03
  • 打赏
  • 举报
回复
High 返回参数对应的有序数据类型的最大取值

楼上的应该就是这个问题的原因了
bbkitty 2005-02-03
  • 打赏
  • 举报
回复
原来是这么复杂啊,谢谢各位了!
可是,"作用于整数的算术运算符返回Integer类型的值,在当前执行中,等价于32位的长整型(LongInt)"这句话还是不太明白,为什么要等价呢?这两者的取值范围和格式都是一样的呀!
bbkitty 2005-02-03
  • 打赏
  • 举报
回复
欧,是这个意思啊,明白了,可是这句话说得真的挺让人晕的,谢谢楼上的帮助!
delphi还挺复杂的,快没信心了
对了,下面我怎么结帖呢?第一次问问题,还不知道规矩,不好意思。
chijingde 2005-02-03
  • 打赏
  • 举报
回复
这句话的意思是说

对于整数的运算,除了纯int64型的,其他的都当成integer来处理

比如说你那个就是int64和integer混合的,所以就当成integer来处理了
chijingde 2005-02-03
  • 打赏
  • 举报
回复
作用于整数的算术运算符返回Integer类型的值,在当前执行中,等价于32位的长整型(LongInt)。
仅当对Int64类型执行运算时,运算结果返回Int64类型。


这个才是主要原因
chijingde 2005-02-03
  • 打赏
  • 举报
回复
55555

楼上的

我写了这么多,你咋也不看看?
chijingde 2005-02-02
  • 打赏
  • 举报
回复
========================================================================================
通常,
作用于整数的算术运算符返回Integer类型的值,在当前执行中,等价于32位的长整型(LongInt)。
仅当对Int64类型执行运算时,运算结果返回Int64类型。
========================================================================================

日的,又看了一遍这句话,突然看明白了

原来是当成integer型来处理了

i+1返回的是integer型,也就是10000000000000000000000000000000

也就是-2147483648

NND,被绕进去了
chijingde 2005-02-02
  • 打赏
  • 举报
回复
如果非要问为什么……

只能期待其他人的高见了

我是搞不明白地
chijingde 2005-02-02
  • 打赏
  • 举报
回复
这个问题不是看起来那么简单
楼上的就更是扯远了……


通常,
作用于整数的算术运算符返回Integer类型的值,在当前执行中,等价于32位的长整型(LongInt)。
仅当对Int64类型执行运算时,运算结果返回Int64类型。
因此,楼主这样的代码执行后得到的结果是不正确的

先来看看二进制代码

high(integer)=01111111111111111111111111111111
这个正常

但是下面这个就不正常了
j:=i+1=1111111111111111111111111111111110000000000000000000000000000000

但是再看这个

j:=i;
j+1=10000000000000000000000000000000
这个又正常了

到底为什么这样,我也说不清
只能看成是编译器跟你怒了,呵呵
chinaandys 2005-02-02
  • 打赏
  • 举报
回复
你这个i,j都是一个局部变量,没有初始化,当然得到的也就是二个指针所指向的变量地址了。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧