биты и массивы в C - Новое в программировании - PullRequest
1 голос
/ 24 сентября 2019

У меня есть заданный код из школы, он мне нужен как вывод: Digital Binair 0 - это 000, 1 - это 001, 2 - это 010, 3 - это 011, 4 - это 100, 5 - это 101, 6 - это 110, 7 - это111 (3 бита)

 I need to work with for loops, this is the given code:



#include <stdio.h>
#include <string.h>

#define ZERO '0'
#define ONE '1'

int main(void) 
{
    char rij[8][4];
    int n, m;

    strcpy( rij[0], "000" );
    printf( "%s\n", rij[0] );

    for ( n=1; n<8; n++ ) 
    {
        strcpy( rij[n], rij[n-1] );
        printf( "%s\n", rij[n] );

        // *ONLY ABLE TO TYPE IN HERE !!!! THE REST IS GIVEN !!!!*
    }

    for( n=0; n<8; n++ ) 
    {
        printf( "%i %s\n", n, rij[n] );
    }

    return 0;
}

Я застрял в том, как сделать цикл for, который работает с битами.Итак, скажем for(n = 0; n < 8; n++) как сделать так, чтобы цикл шел от 000 до 001 до 010.

1 Ответ

0 голосов
/ 25 сентября 2019

Хотя существует много способов генерации двоичной последовательности, здесь задача, по-видимому, была преднамеренно усложнена (или сделана интересной) из-за ограничения на изменение кода только в указанном месте и инициализации каждой последующей строки с содержимымпредыдущего.

Массивы не служат никакой другой цели, кроме как заставить вас думать - это чисто академическое упражнение, а не практическое применение.Каждая строка инициализируется с содержанием предыдущей строки (которую должен изменить код, который вы должны добавить), цель этого упражнения - выполнить двоичное «добавить 1» на каждой итерации.

Чтобы сделать это, начиная с LSB (rij[n][2]), если цифра ZERO, вы устанавливаете ее в ЕДИНИЦУ, затем переходите к следующей n, иначе вы устанавливаете ее в НУЛЬ, и«переносить» один, повторяя описанный выше процесс для следующего старшего значащего бита в строке n.

. Вы можете сделать это в цикле от индекса LSB (2) до индекса MSB (0),и выход из цикла (break) при установке любого бита на ONE.

Или только для трех цифр вы можете развернуть цикл таким образом:

if( rij[n][2] == ZERO )
{
    rij[n][2] = ONE ;
}
else
{
    rij[n][2] = ZERO ;
    if( ...  // test next bit [1] - enough of a hint I think.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...