找回密码
 立即注册

QQ登录

只需一步,快速开始

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

定时器的高八位和低八位

[复制链接]
跳转到指定楼层
楼主
ID:1041297 发表于 2022-8-11 10:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TH0 = (65536-1600)>>8; //63936  //存储高八位数据
TL0 = (65536-1600);     //存储低八位数据
问一下各位,为什么第二条语句可以存储低八位数据
就比如int a=12345678901222222222,那我输出的时候不是a=12345678901,但上面为什么是反着来。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:68189 发表于 2022-8-11 11:25 | 只看该作者
这就是为什么要分男厕所和女厕所的道理是一样的,底层数据是按二进制来存储的,你也知道TL0 TH0只能存储八位数据,多余的数据去哪里了?其实是被丢掉了,这就是规则,从右边取八位。多了装不下,仅此而已。
回复

使用道具 举报

板凳
ID:213173 发表于 2022-8-11 12:04 | 只看该作者
用16进制表述就比较容易看明白
65536-1600=63936=0xF9C0
TH0 = 0xF9C0>>8; //0xF9 高八位移到了低八位赋值TH0,原低八位移出局
TL0 = 0xF9C0;    //0xC0 低八位赋值TL0,高八位溢出被舍弃
直接写:
TH0 = 0xF9;
TL0 = 0xC0;

int a的最大数据范围只能-32768~32767,如果写a=12345678901222222222,数据溢出后得到面目全非的结果。
回复

使用道具 举报

地板
ID:883242 发表于 2022-8-11 20:40 | 只看该作者
赋值给一个变量超过其范围的数据,高位会被截断。
c语言教科书上面都有,为什么要到论坛上面问?
回复

使用道具 举报

5#
ID:123289 发表于 2022-8-15 16:31 | 只看该作者
这写法不太赞同,容易让楼主这样的人误解。
用楼主看得懂的方式写不是一样吗?又何必呢?
当然各人所好,无可是非。
回复

使用道具 举报

6#
ID:1086992 发表于 2023-7-3 11:38 | 只看该作者
Hephaestus 发表于 2022-8-11 20:40
赋值给一个变量超过其范围的数据,高位会被截断。
c语言教科书上面都有,为什么要到论坛上面问?

经典没看书  直接拆分16进制的数值
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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