2011-02-01 74 views
-1

我想读取一个int。例如001.在我想切割成A = 0,B = 0和C = 1之后。我想用C做这个。谢谢!如何分割一个int

+0

这是功课吗? – 2011-02-01 21:13:45

+2

为什么你想使用多个变量而不是数组?另外,我建议你在使用之前先查看“truncate”。 – geoffspear 2011-02-01 21:16:12

+0

为什么不读取char数组而不是int,并且您已经将所有单个数字排列在不同的变量(索引)中。只需记住检查每个到`isdigit()`,并删除结尾'\ 0' – Peyman 2011-02-01 22:14:07

回答

1

如果001是你的整数值I的比特表示,则:

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

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

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

卡尔比勒费尔特的评论大厦:

您可以创建一个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; 
} 

祝你好运!