搜索
bottom↓
回复: 25

怎么用51进行大于8位的运算或表示大于8位的数?

[复制链接]

出0入0汤圆

发表于 2014-9-14 08:42:48 | 显示全部楼层 |阅读模式
请问,如果不懂相关的知识,需要看那些资料?万分感谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2014-9-14 08:46:03 | 显示全部楼层
例如,我得到了一个4095的数,并计算4095/300,难道我只能先除以2再除以150?

出0入0汤圆

发表于 2014-9-14 08:59:34 | 显示全部楼层
用两个或以上的字节保存,运算就和常识中的多位数一样,移位,比较,加减法,进借位等

出0入0汤圆

发表于 2014-9-14 09:05:48 | 显示全部楼层
楼主用的是汇编还是C啊

出0入0汤圆

 楼主| 发表于 2014-9-14 09:18:40 | 显示全部楼层
cqb98 发表于 2014-9-14 09:05
楼主用的是汇编还是C啊

用的C,觉得暂时水平有限,先弄C好了。

出0入0汤圆

发表于 2014-9-14 09:26:38 | 显示全部楼层
整型就可以了,用C就足够了

出0入0汤圆

 楼主| 发表于 2014-9-14 09:33:42 | 显示全部楼层
mcu5i51 发表于 2014-9-14 08:59
用两个或以上的字节保存,运算就和常识中的多位数一样,移位,比较,加减法,进借位等 ...

如果晶振频率相同的话,那用8位的单片机和16位的,32位的单片机运算能力是差不多的,对吗?如果差的多,又差在了哪里呢?谢谢大大!

出0入0汤圆

发表于 2014-9-14 09:34:41 | 显示全部楼层
定义成unsigned int,直接除就行了。。。

出0入0汤圆

发表于 2014-9-14 09:43:15 | 显示全部楼层
guxinghan 发表于 2014-9-14 09:18
用的C,觉得暂时水平有限,先弄C好了。

拜托先好好学学C吧,变量类型,基础的基础。

出0入0汤圆

发表于 2014-9-14 09:56:03 来自手机 | 显示全部楼层
int型可到65535

出0入0汤圆

 楼主| 发表于 2014-9-14 10:03:29 | 显示全部楼层
大大们,休息吧,我去看书了……谢谢,你们的声音犹如警钟长鸣!

出0入0汤圆

发表于 2014-9-14 10:14:02 | 显示全部楼层
unsigned long 类型,数据最大范围是4个字节,十进制的范围是0至4294967295

出0入0汤圆

发表于 2014-9-14 10:42:29 | 显示全部楼层
好好补补你的C吧,感觉你这是刚刚脚尖碰到门槛啊

出0入0汤圆

发表于 2014-9-14 10:59:24 | 显示全部楼层
路漫漫其修远兮

出0入0汤圆

发表于 2014-9-14 11:17:22 来自手机 | 显示全部楼层
guxinghan 发表于 2014-9-14 09:33
如果晶振频率相同的话,那用8位的单片机和16位的,32位的单片机运算能力是差不多的,对吗?如果差的多, ...

差多了。比如说16位的加法,51一类的八位机至少需要5条指令(2个8位寄存器加进位标志拼一个16位的出来)。但是32位的只要一条。自行看数据总线宽度~而且51的执行效率及其低下,12M晶振还没STM32 2M跑的快

出0入0汤圆

 楼主| 发表于 2014-9-14 11:29:08 | 显示全部楼层
我的基础不是很好……
你们都懂的,大学老师不实在,教东西都只教皮毛……
自学的话也不是很系统……
我stm32开始学起的,一年了……
学的略慢……
路漫漫其修远兮……

出0入0汤圆

发表于 2014-9-14 14:39:04 | 显示全部楼层

定义成unsigned int,右移

出0入0汤圆

发表于 2014-9-14 17:53:09 | 显示全部楼层
不明觉厉啊

出0入0汤圆

发表于 2014-9-15 08:56:52 来自手机 | 显示全部楼层
8位算啥,log型数据可以32位长度……

出0入0汤圆

发表于 2014-9-15 09:02:46 | 显示全部楼层
楼主就不能多看书再来问吗.直接冲出来就是这个基础基础的问题.

出0入0汤圆

发表于 2014-9-15 10:20:38 | 显示全部楼层
guxinghan 发表于 2014-9-14 09:33
如果晶振频率相同的话,那用8位的单片机和16位的,32位的单片机运算能力是差不多的,对吗?如果差的多, ...

每种芯片或框架都有自己的指令执行效率,这个很难比了;
或许你会从一些只言片语钟看到16位芯片执行效率会比8位芯片高一半等类似的话,表面看好像很合理,仔细想一下的话就会发现根本不是那么回事。
各个常用的方式方法对比一下看看:
首先是基本数据 8位的处理,8位芯片中自然是8位指令为主,加减运算一半1条指令刻意实现,乘除运算也有很多芯片支持,一到两条指令就好了,周期就不说了,即使同是51芯片相差也太大了;
16位和32位机中,一般也会有8位指令,就是没有也不会太费力气,直接当成16位或32位处理就行,一到两条指令即可;
在说16位数据,8位机中很难直接处理了,这样就需要进行多次运算,最后得到所需的结果,计算一条双字节加减法指令可能需要几条指令来处理,二乘除法可能就需要几十条来实现;在16位或32位芯片中和单字节不会有太大的区别,依然是一两条指令完成,32位结果相同,只是16位芯片的要吃力了;
8危机的有点在于使用资源较小,从而刻意用较低的硬件成本实现产品,32位的有点在于速度快,尤其是大数据时,相比8位机优势明显;缺点就相反了。
随着制造技术的进步32位等成本下降很快,但是毕竟所用的原件会多于8位芯片,在对于成本较严格的地方肯定不会占优势,而现在甚至还有使用4位芯片做的产品,短时间未来走向并不明;

出0入0汤圆

 楼主| 发表于 2014-9-17 11:37:19 | 显示全部楼层
zhuyihua001 发表于 2014-9-15 09:02
楼主就不能多看书再来问吗.直接冲出来就是这个基础基础的问题.

大哥,其实,我就是想让大家给我指条路而已,您别激动哈,嘿嘿……

出0入0汤圆

发表于 2014-9-17 12:00:56 来自手机 | 显示全部楼层
万事开头难,慢慢来吧,楼主需要实际使用一下单片机就不会问这样的问题了。

出0入0汤圆

发表于 2014-9-17 13:35:26 | 显示全部楼层
拆成8位的算,最后合成

出0入8汤圆

发表于 2014-9-17 13:45:29 | 显示全部楼层
有C编程就跟51没什么关系了吧,把数定义成int

出0入0汤圆

发表于 2014-9-17 16:26:41 | 显示全部楼层
多来论坛看看就知道了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 22:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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