十进制转换成格雷码的问题

十进制数923.15转换成格雷码是多少啊,主要是小数部分的处理不来

引用 皆我百晓生 小程序回复内容作答:
格雷码只能用于描述整数部分,不适用于小数部分。要将十进制整数转换为格雷码,可以先将整数部分转换为二进制,然后再将二进制转换为格雷码。

对于整数部分923,转换为二进制为1110011011。接下来将二进制的每一位与其前一位做异或运算,得到的结果即为格雷码。由于923的二进制是11位数,需要在前面补0,补齐至12位数。

所以整数部分923的格雷码为:001110111100。

请注意,格雷码表示的是一种编码方式,它和十进制数之间并非一一对应关系。格雷码的主要优势是只有相邻的两个数的编码只差一个位的变化,这样一来,当转换成二进制或者其他进制时,相邻的两个数之间只会有一个位数(0或1)的变化,避免了大量的位数变化。

对于小数部分,格雷码并不适用。常用的小数编码方式包括二进制、十进制和原码等。

【相关推荐】



  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7811629
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:数组中存放的四个十六进制数合并成一个十六进制数,并转换成十进制?
  • 您还可以看一下 邱石老师的10分钟实现微信小程序支付功能课程中的 新21~支付成功没有收到回调导致订单状态错误小节, 巩固相关知识点
  • 除此之外, 这篇博客: 十六进制与浮点数相互转换中的 十六进制与浮点数相互转换 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    先上代码

    #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()。

    参考文章:

    参考文章1

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^