打印

怪!int型变量取值能取到90000多??

[复制链接]
2725|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
doublers|  楼主 | 2008-4-2 09:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大虾:

这个程序应该很简单,但在我这儿却出现两个奇怪的现象。


程序功能:用数码管依次显示0-9

备注:P0口为数据输出来控制数码管8个阳极
      P10接数码管的阴极
      P0输出高电平P10输出低电平时数码管亮
      0-9对应为:FA,82,B9,AB,C3,6B,7B,A2,FB,EB


#include <reg52.h>

sbit        P10=P1^0;
sbit        P11=P1^1;
sbit        P12=P1^2;
sbit        P13=P1^3;
sbit        P14=P1^4;
sbit        P15=P1^5;
sbit        P16=P1^6;
sbit        P17=P1^7;

void delay(int i)
{
    while(i>1)
       i--;
}

void main(void)
{
   while(1)
    {
      P10=0;
      P0=0xFA;
      delay(98303);
      P0=0x82;
      delay(98303);
      P0=0xB9;
      delay(98303);
      P0=0xAB;
      delay(98303);
      P0=0xC3;
      delay(98303);
      P0=0x6B;
      delay(98303);
      P0=0x7B;
      delay(98303);
      P0=0xA2;
      delay(98303);
      P0=0xFB;
      delay(98303);
      P0=0xEB;
      delay(98303); 
    }
}


问题1:从观察窗口看P0的值,在PC指针经过“P0=0xFA;”后P0的值为什么没有
       变成FA,而是在下条delay语句执行完后P0的值才变为FA?
问题2:void delay(int i)中定义的是int型,为什么其值可以取道98303,它      的范围不是0-65535么?

相关帖子

沙发
xzhenggen| | 2008-4-2 10:10 | 只看该作者

你调试运行一下,是否你的int i变量值达到了90000?

使用特权

评论回复
板凳
doublers|  楼主 | 2008-4-2 10:15 | 只看该作者

倒是忘了看i的值,但是

在运行时我忘了看i的值,但在编译时怎么没有提示出错呢?并且为什么取值
可以到98303,98304都不行!!

谢谢!!

使用特权

评论回复
地板
wangkj| | 2008-4-2 11:06 | 只看该作者

自动溢出翻转了

使用特权

评论回复
5
doublers|  楼主 | 2008-4-2 11:34 | 只看该作者

P0的值为什么没有马上变成FA呢?

在PC指针执行过“P0=0xFA;”后P0的值为什么没有马上变成FA呢?呵呵

使用特权

评论回复
6
ayb_ice| | 2008-4-2 11:37 | 只看该作者

取浮点都可以

但这只是表面现象。。。

使用特权

评论回复
7
doublers|  楼主 | 2008-4-2 11:41 | 只看该作者

能行么?

六楼仁兄的意思是可以给int型变量赋任何值?

使用特权

评论回复
8
ayb_ice| | 2008-4-2 12:16 | 只看该作者

不信你试试。。。

使用特权

评论回复
9
doublers|  楼主 | 2008-4-2 13:32 | 只看该作者

可能是很多初学者都可能会遇到的问题

这个问题虽然很简单,但可能是很多初学者都可能会遇到的问题,哪位大虾能给解释一下

使用特权

评论回复
10
wangkj| | 2008-4-2 13:43 | 只看该作者

赋予任何值是否成功得看你用的编译器

编译器也是程序,不可能100%正确。

使用特权

评论回复
11
mohanwei| | 2008-4-2 15:24 | 只看该作者

溢出了。

使用特权

评论回复
12
doublers|  楼主 | 2008-4-3 09:09 | 只看该作者

编译器竟然不能识别出来

ayb_ice 仁兄说的对,signed char i;i=70000;编译器竟然不能识别出来

使用特权

评论回复
13
后学| | 2008-4-3 09:28 | 只看该作者

sizeof (int)

一般得到的结果是4吧,

虽然ANSI规定了int的范围为-32768~32767,但你的编译器可能没有限制那么小的范围,

使用特权

评论回复
14
doublers|  楼主 | 2008-4-3 10:30 | 只看该作者

谢谢各位大虾了,第二个问题基本上弄清楚了

使用特权

评论回复
15
jimoom| | 2008-4-3 16:57 | 只看该作者

!!

能赋值才是正常的。 
这相当于你把长整形的值赋给整形的变量,任何C编译器都应该支持吧,这过程中只是丢失了一些数据。

使用特权

评论回复
16
doublers|  楼主 | 2008-4-3 17:14 | 只看该作者

这些数据指的是什么数据呢

15楼jimoom仁兄:你所说的“这过程中只是丢失了一些数据”这些数据指的是什么数据呢?是我给它赋的值么?
谢谢jimoom仁兄的指导!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

37

帖子

0

粉丝