2011-02-01 5 views
-1

intで読みたいです。例えば、001です。Aを0に、Bを0に、Cを1にするように切り取った後、Cでこれを行います。ありがとう!intを分割する方法

+0

この宿題ですか? –

+2

なぜ配列の代わりに複数の変数を使用したいのですか?また、使用する前に "truncate"を調べることをお勧めします。 – geoffspear

+0

なぜ、intではなくchar配列を読み込まないと、すべての一桁が既に別の変数(インデックス)に並んでいます。それぞれを 'isdigit()'にチェックし、最後に '\ 0'を削除することを覚えておいてください。 – Peyman

答えて

1

001た場合は、その後、あなたの整数値Iのビット表現です:

int A = (I >> 2) & 0x1 
int B = (I >> 1) & 0x1 
int C = I & 0x1 
+2

あなたは&&&notを意味すると思います。また、I対V. –

+0

@Guy真実の男。 – Elalfer

+1

シフトはもちろん必要ありません: 'A = I&0x04'、' B = I&0x02'、 'C = I&0x01' –

0

あなたは剰余演算子(%)と整数の除算(/)を使用して、望んでいた結果を得ることができます。あなたはカールBielefeldtさんのコメント上のC.

scanf("%d", &i);  
a = i/100; 
b = (i % 100)/10; 
c = (i % 100) % 10; 
+0

警告:これは、負の数を使用すると予期しない結果が生じることがあります。 -5/2と-5%2の合理的な値は、-3と1または-2と-1です。 C99標準と今後のC++ 0x標準では後者が必要ですが、これは必ずしもあなたが期待するものではありません。 IIRC、C90およびC++ 98は指定しなかった。 –

0

ビルを学ぶために始めているときには、ビット演算子よりも理解しやすいです:

あなたがcharの労働組合とのようなビットフィールドを作成することができます

typedef union 
{ 
    unsigned char byte; 
    unsigned char b0 : 1; 
    unsigned char b1 : 1; 
    unsigned char b2 : 1; 
    unsigned char b3 : 1; 
    unsigned char b4 : 1; 
    unsigned char b5 : 1; 
    unsigned char b6 : 1; 
    unsigned char b7 : 1; 
}TYPE_BYTE; 

TYPE_BYTE sample_byte; 

... sample_byte.byteに値を割り当て、sample_byte.b0、sample_byte.b1などの各ビットにアクセスします。ビットの割り当て順序は実装依存です - コンパイラのマニュアルを参照してくださいビットフィールドの実装方法

ビットフィールドは、より大きなint型でも作成できます。


編集(2011-03-15):

は、多分あなたは3桁のベース-10の整数で読み込み、三つの変数に3桁の数字を分割したいと仮定すると、ここでそれを行う必要がありますいくつかのコードです。テストされていないので、微調整が必​​要な場合があります。


void split_base10(const unsigned int input, unsigned int *a, unsigned int *b, unsigned int *c) 
{ 
    unsigned int x = input; 

    *c = x%10; 
    x /= 10; 
    *b = x%10; 
    *a = x/10; 
} 

幸運を祈る!