2

在 C 中,我很好奇如何获取一个无符号字符(即两位长)并能够将第一个数字存储到不同的无符号字符中,并将第二个数字存储到不同的无符号字符中。

4

2 回答 2

1

这取决于您所说的数字

如果您在谈论十进制数字,您需要做的是反复除以 10(十进制数字的基数)并获得余数以提取每个数字。如果只有 2 个数字,则可以通过仅除以 10 来提取第一个数字,通过除以 10 的余数来提取第二个数字。

如果您在谈论十六进制数字,您可以执行与上述相同的操作,但使用以 16 为基数。或者,您可以利用一个字节由两个 4 位 nybbles 组成的事实,每个 nybbles 都可以由一个十六进制数字表示。因此,高 4 位构成第一位,低 4 位构成第二位。

这是一个显示这两种方法的示例:

#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

假设你说的是十进制数字,你可以这样做:

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

整数除以十舍弃;获得除以 10 的余数会去掉余数。

于 2012-10-28T03:22:46.223 回答