2012-02-17 7 views
1

を使用して2つの数を分割:は、私のような可変の持っていると仮定すると、ビット演算子に

int n = 23; 

それ可能分割され、およびへの変換:

int x = n ?? ??; //2 
int y = n ?? ??; //3 

これを行うにはどのようには考えています。どんな助けもありがとうございます。前もって感謝します。

+1

これは醜い、非常に醜いだろう。おそらく、5で除算するため、中間結果の変数が必要になるでしょう。 'int x = n/10;で何が問題なのですか? int y = n%10; '??? – dasblinkenlight

+0

もう1つのオプションは、BCD(2進化10進数)の数字を使用することです。数字(+/-)で単純な操作をしているだけの場合は、小数点以下は正確に4ビットで表されるので、BCD番号から数字を壊すのは簡単です。ちょうどスティーン... – BitBank

答えて

6

ビット演算子を使用する必要はありません。実際には、ビット演算子はバイナリの数値表現で動作するため、一般的にベース10の計算には適していません。

int n = 23; 
int x = n/10; 
int y = n % 10; 
+0

intが3桁で構成されていて、3つに分割するとどうなりますか?そして、もし "n"が<10であれば? – DonCallisto

+0

@Don:そして、user834697は彼が何を望んでいるかについてより具体的にする必要があります。 – sarnold

+0

これは正解のように思えますが、理由は? – macduff

1

各値を取得するループを使用できます。もちろん、xを別の方法で追跡しなければならないでしょうが、これはあなたのために働くと思います。

while (n != 0) 
{ 
    x = n % 10; 
    n = n/10; 
} 
0

libcライブラリを使用する別のアプローチ。 ..他にもあります。

int * 
val2arr(int *arr, const int val) 
{ 
     char tmp[32]={0x0}; // more than digits in LONG_MAX on 64 bit 
     char *p=tmp; 
     int *i=arr; 
     sprintf(p, "%d", val); 
     for(; *p; i++, p++) 
      *i=*p - 48; 
     *i=-1;   // mark end with -1 
     return arr; 
} 
関連する問題