如何在C代码(256->;4)中将带小数点的有符号数字解释为实际值

如何在C代码(256->;4)中将带小数点的有符号数字解释为实际值,c,floating-point,vhdl,C,Floating Point,Vhdl,我有一个从vhdl代码输入到用C语言编程的Nios系统的输入 在vhdl中 signal input : ufixed(9 downto -6); 当我把这个输入输入到C编译器中时,在终端窗口中,它被显示出来 input = 256 在vhdl中,输入被声明为有10个小数点和6个小数点。所以 二进制输入应如下所示:000000010000000(相当于十进制的256) 我应该怎么做才能在C代码中将“输入”解释为值4 我想要整数和小数部分,例如,如果输入是00000001000000,

我有一个从vhdl代码输入到用C语言编程的Nios系统的输入

在vhdl中

signal input    : ufixed(9 downto -6); 
当我把这个输入输入到C编译器中时,在终端窗口中,它被显示出来

input = 256
在vhdl中,输入被声明为有10个小数点和6个小数点。所以

二进制输入应如下所示:
000000010000000
(相当于十进制的
256

我应该怎么做才能在C代码中将“输入”解释为值
4


我想要整数和小数部分,例如,如果输入是
00000001000000
,我想要在C代码中得到
4.5
的值,假设你在
无符号int
变量中得到值,并且只关心整数部分,一种快速的方法是

  • 收到价值
  • n
    位计算的变量值(您知道,小数部分)
  • 存储结果

  • 假设您得到的是
    无符号int
    变量中的值,并且只关心整数部分,一种快速方法是

  • 收到价值
  • n
    位计算的变量值(您知道,小数部分)
  • 存储结果

  • 在C代码中,您只需除以比例因子即可得到等效值:

    float f = (float)input / (1 << 6);   // divide by 2^6 = 64
    

    在C代码中,您只需除以比例因子即可得到等效值:

    float f = (float)input / (1 << 6);   // divide by 2^6 = 64
    

    那是十进制的。所以除以1e(x),而不是移位。另外:移位将丢弃分数部分。@Olaf My Bad,我认为只需要整数部分。将更新为十进制。所以除以1e(x),而不是移位。另外:移位将丢弃分数部分。@Olaf My Bad,我认为只需要整数部分。将更新
    输入>>6
    将为您提供整数部分。您没有提供足够的线索让我们猜测您想对小数部分做什么。
    input>>6
    将为您提供整数部分。你没有给我们足够的线索来猜测你想对分数部分做什么。