Как разделить int - PullRequest
       19

Как разделить int

0 голосов
/ 02 февраля 2011

Я хочу прочитать в Int. Например, 001. После того, как я хочу разрезать на так, чтобы A = 0, B = 0 и C = 1. Я хочу сделать это в C. Спасибо!

Ответы [ 3 ]

1 голос
/ 02 февраля 2011

Если 001 является битовым представлением вашего целочисленного значения I, то:

int A = (I >> 2) & 0x1
int B = (I >> 1) & 0x1
int C = I & 0x1
0 голосов
/ 02 февраля 2011

Опираясь на комментарий Карла Билефельда:

Вы можете создать объединение символа и битового поля, например:

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):

Предполагая, что, возможно, вы хотите прочитать трехзначное целое число от 10 до 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;
}

Удачи!

0 голосов
/ 02 февраля 2011

Вы можете достичь желаемого результата, используя оператор модуля (%) и целочисленное деление (/).Это легче понять, чем побитовые операторы, когда вы начинаете изучать C.

scanf("%d", &i);    
a = i / 100;
b = (i % 100) / 10;
c = (i % 100) % 10;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...