2

C では、unsigned char (2 桁の長さ) を取得し、1 桁目を別の unsigned char に格納し、2 桁目を別の unsigned char に格納する方法に興味がありました。

4

2 に答える 2

1

それはdigitsの意味によって異なります。

10 進数について話している場合は、各桁を抽出するために 10 (10 進数の基数) で繰り返し除算し、剰余を取得する必要があります。2 桁しかない場合、1 桁目は 10 で割るだけで抽出でき、2 桁目は 10 で割った余りを取得することで抽出できます。

16 進数について話している場合は、上記と同じことができますが、代わりに基数 16 を使用します。あるいは、1 バイトが 2 つの 4 ビット ニブルで構成され、それぞれが 16 進数で表現できるという事実を利用することもできます。したがって、上位 4 ビットが 1 桁目を構成し、下位 4 ビットが 2 桁目を構成します。

両方の方法を示す例を次に示します。

#include <stdio.h>

void hex_digits(void)
{
   unsigned char uc = 0xAB;
   unsigned char nyb_hi = uc >> 4;
   unsigned char nyb_lo = uc & 0xF;

   printf("High nybble: 0x%X, low: 0x%X\n", nyb_hi, nyb_lo);
}

void decimal_digits(void)
{
   unsigned char uc = 12;
   unsigned char d1 = uc / 10;
   unsigned char d2 = uc % 10;

   printf("First digit: %u, second: %u\n", d1, d2);
}

int main(void)
{
   hex_digits();
   decimal_digits();

   return 0;
}
于 2012-10-28T03:31:41.013 に答える
1

あなたが10進数を話していると仮定すると、これを行うことができます:

unsigned char v = 42;
unsigned char tens = v / 10;
unsigned char ones = v % 10;

整数を 10 で割ると、1 が破棄されます。10 で割った余りを取得すると、残りの数が削除されます。

于 2012-10-28T03:22:46.223 に答える