十进制数923.15转换成格雷码是多少啊,主要是小数部分的处理不来
引用 皆我百晓生 小程序回复内容作答:
格雷码只能用于描述整数部分,不适用于小数部分。要将十进制整数转换为格雷码,可以先将整数部分转换为二进制,然后再将二进制转换为格雷码。
对于整数部分923,转换为二进制为1110011011。接下来将二进制的每一位与其前一位做异或运算,得到的结果即为格雷码。由于923的二进制是11位数,需要在前面补0,补齐至12位数。
所以整数部分923的格雷码为:001110111100。
请注意,格雷码表示的是一种编码方式,它和十进制数之间并非一一对应关系。格雷码的主要优势是只有相邻的两个数的编码只差一个位的变化,这样一来,当转换成二进制或者其他进制时,相邻的两个数之间只会有一个位数(0或1)的变化,避免了大量的位数变化。
对于小数部分,格雷码并不适用。常用的小数编码方式包括二进制、十进制和原码等。
【相关推荐】
先上代码
#include <stdio.h>
unsigned char pData[4]={0x66,0xE6,0xF0,0x42};
unsigned char buf[4];
float num;
float Char2Float(unsigned char *chReceive)
{
float fReceive;
*((char *)(&fReceive)) = chReceive[0];
*((char *)(&fReceive) + 1) = chReceive[1];
*((char *)(&fReceive) + 2) = chReceive[2];
*((char *)(&fReceive) + 3) = chReceive[3];
return fReceive;
}
void Float2Char (float fSend, unsigned char *chSend)
{
chSend[0] = *((char *)(&fSend));
chSend[1] = *((char *)(&fSend) + 1);
chSend[2] = *((char *)(&fSend) + 2);
chSend[3] = *((char *)(&fSend) + 3);
}
int main(void)
{
char i;
num = Char2Float(pData);
printf("%f\r\n",num);
Float2Char(num,buf);
for(i=0;i<4;i++)
{
printf("%x\r\n",buf[i]);
}
return 0;
}
运行结果
建议在函数中不要对输入变量的内存直接进行操作,可以先在函数中申请一个局部变量,对局部变量操作完成后,赋值给需要转换的变量。直接操作在单片机中可能造成HardFault()。
参考文章: