找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 774|回复: 8
打印 上一主题 下一主题
收起左侧

C51单片机中3600*24和86400有什么区别?

[复制链接]
跳转到指定楼层
楼主
ID:66679 发表于 2022-4-27 10:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
3600*24和86400有什么区别。在C51中用3600*24不能正常显示24小时,用86400就可以。为什么?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:554500 发表于 2022-4-27 13:24 | 只看该作者
3600*24和86400本质上没什么区别,如果你用的86400是一个常量,而3600*24赋值给一个unsigned int 类型的变量,这个区别就大了。
unsigned int 类型的变量存储空间占两个字节(最大值65535) 。你把一个大于65535的数装进这个空间里,明显装不下,肯定会溢出。
不知道你能理解不??
回复

使用道具 举报

板凳
ID:1022034 发表于 2022-4-27 15:06 | 只看该作者
51论坛是个好网站,可以下载好多东西,学到了好多
回复

使用道具 举报

地板
ID:66679 发表于 2022-4-27 15:12 | 只看该作者
18701931930 发表于 2022-4-27 13:24
3600*24和86400本质上没什么区别,如果你用的86400是一个常量,而3600*24赋值给一个unsigned int 类型的变 ...

谢谢回复
回复

使用道具 举报

5#
ID:514317 发表于 2022-4-27 15:55 | 只看该作者
如果你用的是unsigned long就没问题    都是一样   用的是unsigned int  就溢出了
回复

使用道具 举报

6#
ID:883242 发表于 2022-4-27 21:17 | 只看该作者
c语言编译器常量默认是int型的。不仅3600*24超过了范围,86400也是不对的,我怀疑你实际写的是86400L。
回复

使用道具 举报

7#
ID:66679 发表于 2022-4-28 08:46 | 只看该作者
18701931930 发表于 2022-4-27 13:24
3600*24和86400本质上没什么区别,如果你用的86400是一个常量,而3600*24赋值给一个unsigned int 类型的变 ...

void test(void)
{
       unsigned long mid1,mid2,mid3;
       mid1=6*10000;
       mid2=7*10000;
       mid3=8*10000;
}

调试一下代码就会发现:
mid1=0xea60=60000;
mid2=0x1170=4464;
mid3=0x3880=14464;

mid1是正确的,mid2和mid3是错误的!
回复

使用道具 举报

8#
ID:554500 发表于 2022-4-29 21:23 | 只看该作者
hyjxxy 发表于 2022-4-28 08:46
void test(void)
{
       unsigned long mid1,mid2,mid3;

//这样改,把10000修饰为一个long类型的数,系统默认把10000为int类型了。
void test(void)
{
       unsigned long mid1,mid2,mid3;
       mid1=6*10000L;
       mid2=7*10000L;
       mid3=8*10000L;
}
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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