访问2位长的无符号字符(C)的数字

时间:2012-10-28 03:19:53

标签: c

在C中,我很好奇如何取一个unsigned char(长度为两位数)并且能够将第一个数字存储到不同的unsigned char中,将第二个数字存储到另一个unsigned char中。

2 个答案:

答案 0 :(得分:1)

假设您正在说十进制数字,您可以这样做:

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

十个丢弃的整数除法;获得该除法的剩余部分,其余数字为10分。

答案 1 :(得分:1)

这取决于数字的含义。

如果你在谈论十进制数字,你需要做的是重复除以10(十进制数的基数)并得到余数以提取每个数字。如果只有2位数字,则可以通过除以10来提取第一个数字,第二个数字可以通过除以10的剩余部分来提取。

如果您正在谈论十六进制数字,您可以执行与上面相同的操作,但使用16的基数。或者,您可以利用一个字节由两个4位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;
}