2011-02-01 106 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; 
} 

祝你好運!