0

我有以下代码,转换 dec。到二进制(存储为 int),它在 C::B 中运行得很好:

 for(i=0;i<8;i++)
   {
    carry = start_value%2;
    tab[bla] = carry;
    bla++;
    start_value = start_value/2;
   }

for(i=bla; i>0; i--)
       {
       binary = binary + tab[i]*pow(10,i);
       }

但是当我尝试用 MikroC 在 PIC18F4550 上做同样的事情时,它就失败了!我已经包含了“pow”并尊重了我使用的变量的声明。无论如何,输出都是错误的(例如 -62053 而不是 110110)。

感谢您查看它:)祝您有美好的一天

4

4 回答 4

0

要从二进制数字数组中获取十进制值,您必须将它们乘以 2 的适当幂,而不是 10。假设 pow() 看起来是 pow(base, exponent),您需要使用pow(2,i) 代替。

于 2010-11-19T19:34:13.937 回答
0

jmpcm :一个 int 在我的 PIC18F 上是 16 位(2 个字节)。但问题是代码在我的计算机上运行良好,但在 PIC 上却不行,而我使用的变量大小相同。

菲利普:我觉得你说的桌子没有清理干净的说法是对的!虽然还不能测试。

Jeanne Pindar:不。我将需要与之交互的位数组存储在 int 中(需要节省 RAM 空间),因此我们仍在使用 base10 进行最终存储。

全部:我用我定义了所有位的结构设法摆脱了它:

struct {
unsigned int bit0: 1;
unsigned int bit1: 1;
...

因此,我可以将 1 位存储在一组 8 位中,并将其视为主要计算中的 int 并在 Nx1 矩阵中访问它。

尽管如此,还是感谢您的帮助!

于 2010-11-20T15:08:19.830 回答
0

您应该从第二个循环开始,i = bla - 1因为它比二进制数字多一倍。也可能tab[]是没有初始化为0。

第二个循环应包含第一个选项卡元素: tab[0] :

for(i = bla - 1; i >= 0; i--)
{
    binary += tab[i] * pow(10, i);
}
于 2010-11-19T16:37:08.740 回答
0

检查此 PIC 体系结构的int类型 ( ) 的大小。sizeof(int)例如,如果 anint是 16 位,它可以容纳的最大值是 65535(对于 an unsigned int)或从 -32768 到 32767(对于 an int)。问题可能是您计算的值对于您使用的类型来说太大了。

于 2010-11-19T16:56:53.590 回答