Рубрики

Вывод программы на C | Набор 25

Предсказать вывод следующей программы на Си.

int main(void)

{

    struct str

    {

        int i: 1;

        int j: 2;

        int k: 3;

        int l: 4;

    };

  

    struct str s;

  

    s.i = 1;

    s.j = 2;

    s.k = 5;

    s.l = 10;

  

    printf(" i: %d \n j: %d \n k: %d \n l: %d \n", s.i, s.j, s.k, s.l);

  

    getchar();

    return 0;

}

Приведенный выше код является непереносимым и вывод зависит от компилятора. Мы получаем следующий вывод, используя компилятор GCC для 32-битной машины Intel.

  [narendra@ubuntu]$ ./structure
  i: -1
  j: -2
  k: -3
  l: -6

Давайте подробнее рассмотрим декларацию структуры.

struct str

{

    int i: 1;

    int j: 2;

    int k: 3;

    int l: 4;

};

В объявлении структуры для элемента структуры «i» мы использовали ширину битового поля как 1, ширину «j» как 2 и так далее. Во-первых, похоже, что мы можем хранить значения в диапазоне [0-1] для «i», диапазоне [0-3] для «j» и так далее. Но в приведенном выше объявлении тип битовых полей — целое число (со знаком ). Вот почему из доступных битов 1 бит используется для хранения информации о знаках. Таким образом, для 'i' значения, которые мы можем сохранить, равны 0 или -1 (для машины, которая использует дополнение до двух для хранения целых чисел со знаком). Для переменной 'k' число битов равно 3. Из этих 3 битов 2 бита используются для хранения данных, а 1 бит используется для хранения знака.

Давайте использовать объявить членов структуры как «unsigned int» и проверить вывод.

int main(void)

{

    struct str

    {

        unsigned int i: 1;

        unsigned int j: 2;

        unsigned int k: 3;

        unsigned int l: 4;

    };

    struct str s;

  

    s.i = 1;

    s.j = 2;

    s.k = 5;

    s.l = 10;

  

    printf(" i: %d \n j: %d \n k: %d \n l: %d \n", s.i, s.j, s.k, s.l);

  

    getchar();

    return 0;

}

выход:

  [narendra@ubuntu]$ ./structure
  i: 1
  j: 2
  k: 5
  l: 10

Эта статья составлена Narendra Kangralkar и рецензирована командой GeeksforGeeks. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Вывод программы на C | Набор 25

0.00 (0%) 0 votes