OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4464|回复: 8

求助:::Keil 5的C语言 ( int )数据类型问题!!!

[复制链接]

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2017-7-26
在线时间
29 小时
发表于 2017-9-14 11:14:21 | 显示全部楼层 |阅读模式
5金钱
if(Delay_f == 1){Second1--;if(Second1 == 65535)Second1 = 99;}
else if(Volumn_f == 1){mL_1000--;if(mL_1000== 65535)mL_1000 = 99;}
else if(Coarse_f == 1){Speed1_1--;if(Speed1_1 == 65535)Speed1_1 = 89;}
else if(Minitrim_f == 1){Speed1_2--;if(Speed1_2 == 65535)Speed1_2 = 99;}

上面这些代码中的Second1,mL_1000,Speed1_1,Speed1_2都是定义的int(0-65535)数据类型,我需要的计数是可以从0-99计数的(包括0),之前写成if(Speed1_2 <0)Speed1_2 = 99,后来才知道KEIL的int数据类型只有0-65535,所以改成if(Speed1_2 == 65535)Speed1_2 = 99;但是改成这样之后,每次数据减下去,5,4,3,2,1,0,95,94,93,92.......;这样的话我这条语句Speed1_2 = 99;是不是没有起作用了,还是其他问题?

最佳答案

查看完整内容[请看2#楼]

1、int 型,也就是signed int型,在32bit芯片里是-2^31-(2^31-1); 2、你说的应该是signed short型,范围是-32768 - 32767; 3、提问的时候建议把问题描述清楚,排版尽量整齐一点; 4、我来猜着回答你的问题,你用这个代码就可以循环输出99..0,不知道能不能满足楼主的要求; [mw_shl_code=c,true]int i=99; while(1) { printf("%d",i); i-- if(i < 0) i = 99; }[/mw_shl_code])
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2013-3-3
在线时间
34 小时
发表于 2017-9-14 11:14:22 | 显示全部楼层
1、int 型,也就是signed int型,在32bit芯片里是-2^31-(2^31-1);
2、你说的应该是signed short型,范围是-32768 - 32767;
3、提问的时候建议把问题描述清楚,排版尽量整齐一点;
4、我来猜着回答你的问题,你用这个代码就可以循环输出99..0,不知道能不能满足楼主的要求;
[mw_shl_code=c,true]int i=99;
while(1)
{
    printf("%d",i);
    i--        
    if(i < 0)
        i = 99;
}[/mw_shl_code])
回复

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2017-7-26
在线时间
29 小时
 楼主| 发表于 2017-9-14 11:16:29 | 显示全部楼层
上面的问题,不仅仅是Speed1_2有这个问题;Second1,mL_1000,Speed1_1等,还有好几个int数据类的数也是这样的
回复

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2017-7-26
在线时间
29 小时
 楼主| 发表于 2017-9-14 11:26:44 | 显示全部楼层
if(Delay_f == 1){Second1++;if(Second1>=100)Second1 = 0;}
else if(Volumn_f == 1){mL_1000++;if(mL_1000>=100)mL_1000 = 0;}
else if(Coarse_f == 1){Speed1_1++;if(Speed1_1>=90)Speed1_1 = 0;}
else if(Minitrim_f == 1){Speed1_2++;if(Speed1_2>=100)Speed1_2 = 0;}
数据往上加是没有问题的,当数据变为0之后,尝试往下减,又变成了95,94,93,92..........
回复

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2017-7-26
在线时间
29 小时
 楼主| 发表于 2017-9-14 12:56:08 | 显示全部楼层
hgqlyl 发表于 2017-9-14 11:39
1、int 型,也就是signed int型,在32bit芯片里是-2^31-(2^31-1);
2、你说的应该是signed short型,范围 ...

谢谢你!
1、我写103代码,用KEIL 5 ,定义数据类型的时候,就是int ,比如int Speed1_2;
2、之前写成if(Speed1_2 <0)Speed1_2 = 99,Speed1_2减到0之后,再减就变成了95.....
3、可能是我没很清楚32bit芯片的int,signed int,signed short吧,我再好好看看。
非常感谢你的回答!!!!!!!!!!!!!
回复

使用道具 举报

1

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2013-3-3
在线时间
34 小时
发表于 2017-9-14 13:37:33 | 显示全部楼层
ZZBEAM 发表于 2017-9-14 12:56
谢谢你!
1、我写103代码,用KEIL 5 ,定义数据类型的时候,就是int ,比如int Speed1_2;
2、之前写成 ...

你这个突然间变成95肯定有问题,肯定是在哪里设置,或者多次执行了减减操作,你是在哪里看的?认真查一下代码。这个跟编译器肯定没有关系。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2017-9-15 01:52:19 | 显示全部楼层
ZZBEAM 发表于 2017-9-14 12:56
谢谢你!
1、我写103代码,用KEIL 5 ,定义数据类型的时候,就是int ,比如int Speed1_2;
2、之前写成 ...

仿真可以解决你的问题。
int就是singed
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2017-9-15 08:47:33 | 显示全部楼层
本帖最后由 jiutianshenjian 于 2017-9-15 08:56 编辑

你把你变量的定义贴出来看看。怎么0下来就是95了。

小小蜗牛
回复

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2017-7-26
在线时间
29 小时
 楼主| 发表于 2017-9-20 10:59:23 | 显示全部楼层
jiutianshenjian 发表于 2017-9-15 08:47
你把你变量的定义贴出来看看。怎么0下来就是95了。

就是int 没有其他了
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-18 11:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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