C51中,程序从单片机端口读到的数据是十六进制的吗?另外十六进制和十进制能直接做加减法乘除吗
ADC0809送数据到P2口,P2口中的数据应该是十六进制的吧??赋值给变量a后,能用a直接去除整数(比如12)吗?也就是单片机自己会做数值转换吗,把十六进制的变量a变成...
ADC0809送数据到P2口,P2口中的数据应该是十六进制的吧??赋值给变量a后,能用a直接去除整数(比如12)吗?也就是单片机自己会做数值转换吗,把十六进制的变量a变成十进制再去除整数12。省的我们自己来做数值转换工作。
展开
展开全部
首先回答问题:读入的数是二进制的,但是参加计算不用考虑转换。
电脑中的数,严格地讲,都是二进制的!
对于一个常数, 在不同的数进制之间转换时,需要按一定的方法进行。
但是,不管你是什么进制的数,放在变量里,就是一样的!不需要考虑转换问题。
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
电脑中的数,严格地讲,都是二进制的!
对于一个常数, 在不同的数进制之间转换时,需要按一定的方法进行。
但是,不管你是什么进制的数,放在变量里,就是一样的!不需要考虑转换问题。
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询