C51中,程序从单片机端口读到的数据是十六进制的吗?另外十六进制和十进制能直接做加减法乘除吗

ADC0809送数据到P2口,P2口中的数据应该是十六进制的吧??赋值给变量a后,能用a直接去除整数(比如12)吗?也就是单片机自己会做数值转换吗,把十六进制的变量a变成... ADC0809送数据到P2口,P2口中的数据应该是十六进制的吧??赋值给变量a后,能用a直接去除整数(比如12)吗?也就是单片机自己会做数值转换吗,把十六进制的变量a变成十进制再去除整数12。省的我们自己来做数值转换工作。 展开
 我来答
雨田丫
推荐于2018-03-19 · TA获得超过822个赞
知道小有建树答主
回答量:235
采纳率:100%
帮助的人:163万
展开全部
首先回答问题:读入的数是二进制的,但是参加计算不用考虑转换。

电脑中的数,严格地讲,都是二进制的!
对于一个常数, 在不同的数进制之间转换时,需要按一定的方法进行。

但是,不管你是什么进制的数,放在变量里,就是一样的!不需要考虑转换问题。
a=254,你可以想成是16进制:0xfe,也可想成二进制:11111110
反之:
a=0x80,你可以想成是10进制:128,也可以是二进制:10000000

变量赋值后,参加计算,不管是什么“制”,直接算就是了。如
a=123,b=0xa9,一个十进制,一个十六进制。存入变量后,都是二进制。
要乘:c=a*b
要加:c=a+b
不需要考虑进制问题。

不过:如果要从变量中取得个位,十位的话,就有所不同了:
如:取10进制个位:a%10
取16进制个位要写成:a%0x10 或 a%16
======================================
有一种特殊情况:BCD码形式
这是一种特殊的保存数据方法,即每4位二进制只保存0-9的数,这种情况,它是不能直接参加计算的。
例如,BCD的23(二进制是0010 0011),你不能当10进制23(二进制0001 0111),也不能当16进制0x23(二进制0010 0011)。
因为:BCD的23的形式是0010 0011,其值的大小是0001 0111
18545862
2013-06-03 · 超过17用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:44.1万
展开全部
C语言中 0x00, 0x45, 0xff,代表16进制数,12, 25,105等代表10进制
汇编中 #00000010B 代表2进制,#2FH 代表16进制,#16代表10进制
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式