guxinghan 发表于 2014-9-14 08:42:48

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

请问,如果不懂相关的知识,需要看那些资料?万分感谢!

guxinghan 发表于 2014-9-14 08:46:03

例如,我得到了一个4095的数,并计算4095/300,难道我只能先除以2再除以150?

mcu5i51 发表于 2014-9-14 08:59:34

用两个或以上的字节保存,运算就和常识中的多位数一样,移位,比较,加减法,进借位等

cqb98 发表于 2014-9-14 09:05:48

楼主用的是汇编还是C啊

guxinghan 发表于 2014-9-14 09:18:40

cqb98 发表于 2014-9-14 09:05
楼主用的是汇编还是C啊

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

hyg5200aaa 发表于 2014-9-14 09:26:38

整型就可以了,用C就足够了

guxinghan 发表于 2014-9-14 09:33:42

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

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

Arvin_lu 发表于 2014-9-14 09:34:41

定义成unsigned int,直接除就行了。。。

zhanan 发表于 2014-9-14 09:43:15

guxinghan 发表于 2014-9-14 09:18
用的C,觉得暂时水平有限,先弄C好了。

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

fsclub 发表于 2014-9-14 09:56:03

int型可到65535

guxinghan 发表于 2014-9-14 10:03:29

大大们,休息吧,我去看书了……谢谢,你们的声音犹如警钟长鸣!

th1993 发表于 2014-9-14 10:14:02

unsigned long 类型,数据最大范围是4个字节,十进制的范围是0至4294967295

wzd5230 发表于 2014-9-14 10:42:29

好好补补你的C吧,感觉你这是刚刚脚尖碰到门槛啊

chengz 发表于 2014-9-14 10:59:24

路漫漫其修远兮

xwkm 发表于 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跑的快

guxinghan 发表于 2014-9-14 11:29:08

我的基础不是很好……
你们都懂的,大学老师不实在,教东西都只教皮毛……
自学的话也不是很系统……
我stm32开始学起的,一年了……
学的略慢……
路漫漫其修远兮……

wshg 发表于 2014-9-14 14:39:04


定义成unsigned int,右移

别有洞天下 发表于 2014-9-14 17:53:09

不明觉厉啊

benli 发表于 2014-9-15 08:56:52

8位算啥,log型数据可以32位长度……

zhuyihua001 发表于 2014-9-15 09:02:46

楼主就不能多看书再来问吗.直接冲出来就是这个基础基础的问题.

mcu5i51 发表于 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位芯片做的产品,短时间未来走向并不明;

guxinghan 发表于 2014-9-17 11:37:19

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

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

西施糖葫芦 发表于 2014-9-17 12:00:56

万事开头难,慢慢来吧,楼主需要实际使用一下单片机就不会问这样的问题了。

guyong2012 发表于 2014-9-17 13:35:26

拆成8位的算,最后合成

轻风 发表于 2014-9-17 13:45:29

有C编程就跟51没什么关系了吧,把数定义成int

hamxiyue 发表于 2014-9-17 16:26:41

多来论坛看看就知道了
页: [1]
查看完整版本: 怎么用51进行大于8位的运算或表示大于8位的数?