如何拆分int

时间:2011-02-01 21:12:00

标签: c split

我想读一个int。例如001.在我想要切入之后,A = 0,B = 0和C = 1.我想在C中做到这一点。谢谢!

3 个答案:

答案 0 :(得分:1)

如果001是整数值I的位表示,则:

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

答案 1 :(得分:0)

您可以通过使用模数运算符(%)和整数除法(/)来实现所需的结果。当你开始学习C时,它比按位运算符更容易理解。

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

答案 2 :(得分:0)

以Karl Bielefeldt的评论为基础:

您可以创建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位整数,并将这三个数字分成三个变量,这里有一些应该这样做的代码。它尚未经过测试,因此您可能需要进行一些调整:


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;
}
祝你好运!