intで読みたいです。例えば、001です。Aを0に、Bを0に、Cを1にするように切り取った後、Cでこれを行います。ありがとう!intを分割する方法
答えて
001
た場合は、その後、あなたの整数値I
のビット表現です:
int A = (I >> 2) & 0x1
int B = (I >> 1) & 0x1
int C = I & 0x1
あなたは&&&notを意味すると思います。また、I対V. –
@Guy真実の男。 – Elalfer
シフトはもちろん必要ありません: 'A = I&0x04'、' B = I&0x02'、 'C = I&0x01' –
あなたは剰余演算子(%)と整数の除算(/)を使用して、望んでいた結果を得ることができます。あなたはカールBielefeldtさんのコメント上のC.
scanf("%d", &i);
a = i/100;
b = (i % 100)/10;
c = (i % 100) % 10;
警告:これは、負の数を使用すると予期しない結果が生じることがあります。 -5/2と-5%2の合理的な値は、-3と1または-2と-1です。 C99標準と今後のC++ 0x標準では後者が必要ですが、これは必ずしもあなたが期待するものではありません。 IIRC、C90およびC++ 98は指定しなかった。 –
ビルを学ぶために始めているときには、ビット演算子よりも理解しやすいです:
あなたが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;
}
幸運を祈る!
この宿題ですか? –
なぜ配列の代わりに複数の変数を使用したいのですか?また、使用する前に "truncate"を調べることをお勧めします。 – geoffspear
なぜ、intではなくchar配列を読み込まないと、すべての一桁が既に別の変数(インデックス)に並んでいます。それぞれを 'isdigit()'にチェックし、最後に '\ 0'を削除することを覚えておいてください。 – Peyman