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」を含め、使用する変数の宣言を尊重しました。何があっても、出力は間違っています (たとえば、110110 ではなく -62053)。

ご覧いただきありがとうございます:)良い一日を

4

4 に答える 4

0

この PIC アーキテクチャのint型 ( )のサイズを確認してください。sizeof(int)たとえば、intが 16 ビットの場合、保持できる最大値は 65535 ( の場合unsigned int) または -32768 ~ 32767 ( の場合int) です。おそらく問題は、計算している値が使用している型に対して大きすぎることです。

于 2010-11-19T16:56:53.590 に答える
0

2 進数の配列から 10 進数値を取得するには、10 ではなく、適切な 2 の累乗を乗算する必要があります。代わりに pow(2,i) を使用してください。

于 2010-11-19T19:34:13.937 に答える
0

2 番目のループは 2i = bla - 1進数よりも 1 回インクリメントされているため、そこから開始する必要があります。tab[]また、0 に初期化されていない可能性もあります。

そして、2 番目のループは最初のタブ要素で構成されます: tab[0] :

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

jmpcm : 私の PIC18F では、int は 16 ビット (2 バイト) です。しかし、問題は、使用する変数のサイズが同じであるのに対し、コードは私のコンピューターでは正常に実行されますが、PIC では実行されないことです。

philippe : テーブルがクリアされていないということについては、あなたが正しいかもしれないと感じています。ただし、まだテストできません。

Jeanne Pindar : いいえ。やり取りする必要があるビットの配列を int に格納しているので (RAM スペースを節約する必要があります)、最終格納で base10 を使用しています。

All : すべてのビットを定義した構造体を使用して、なんとか抜け出すことができました。

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

したがって、1 ビットを 8 ビットのグループに格納し、それをメインの計算で int として扱い、Nx1 行列でアクセスできます。

それにもかかわらず、あなたの助けに感謝します!

于 2010-11-20T15:08:19.830 に答える