我有以下代码,转换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)。
感谢您查看:) 祝你有愉快的一天
答案 0 :(得分:0)
你应该从i = bla - 1
开始第二个循环,因为它比二进制数字再增加一次。也可能是tab[]
未初始化为0.
第二个循环应包含第一个标签元素:tab [0]:
for(i = bla - 1; i >= 0; i--)
{
binary += tab[i] * pow(10, i);
}
答案 1 :(得分:0)
检查此PIC体系结构的int
类型(sizeof(int)
)的大小。例如,如果int
为16位,则它可以容纳的最大值为65535(对于unsigned int
)或从-32768到32767(对于int
)。可能问题在于您计算的值对于您使用的类型来说太大了。
答案 2 :(得分:0)
要从二进制数字数组中获取十进制值,您必须将它们乘以2的适当幂,而不是10.假设pow()看起来像是pow(base,exponent),你需要使用pow(2,i)代替。
答案 3 :(得分:0)
jmpcm: 我的PIC18F上的int是16位(2个字节)。 但问题是代码在我的计算机上运行良好但在PIC上运行不正常,而我使用的变量大小相同。
philippe: 我有一种感觉,你可能是正确的桌子没有被清除!但是无法测试它。
Jeanne Pindar: 不。我存储了一个需要与int进行交互的位数组(需要节省RAM空间),所以我们仍然在最终存储时使用base10。
全部: 我用它定义了所有位的结构来解决它的问题:
struct {
unsigned int bit0: 1;
unsigned int bit1: 1;
...
因此,我可以在一组8位中存储1位,并在主计算中将其视为int,并以Nx1矩阵访问它。
谢谢你的帮助!