Битовые Операции На Си

Тема в разделе "C/C++/C#", создана пользователем doojkee, 17 мар 2013.

  1. doojkee

    doojkee New Member

    Регистрация:
    8 апр 2012
    Сообщения:
    3
    Симпатии:
    0
    Добрый вечер, форумчане, нужна ваша помощь, никак не могу додуматься, как сделать это задание:



    Задание нужно выполнить на чистом Си.
    Вот мои наработки:

    Код (C++):
    #include <stdio.h>
    #include <conio.h>
    #include <windows.h>

    int output(char x[]){
    int i,j;
    for (i = 7; i >-1; i--)
    for (j = 7; j >-1; j--){
    printf("%d",(x[i]>>j)&1);
    }
    printf("\n");
    }


    int main(){
    int i,n_bit,k_num_bits, number;
    system("cls");

    union{
    double m;
    char a[8];
    }type;


    printf("Enter the number: ");
    scanf("%lf", &type.m);

    output(type.a);

    printf("Enter the '1' or '0': ");
    scanf("%d", &number);

    printf("Enter the numbers of bits: ");
    scanf("%d", &n_bit);

    for(i = 0;i < n_bit;i++){
    printf("Enter the number of bits: ");
    scanf("%d",&k_num_bits);
    type.a[k_num_bits/8] = type.a[k_num_bits/8]^(1<<(k_num_bits-8*(k_num_bits/8)));
    }

    printf("\n");
    output(type.a);
    printf("\n");

    printf("\nResult is: -> %lf ", type.m);

    getch();
    return 0;

    }
    В моей коде работает все, только для введенного значения 1, если 0, я не знаю, как дописать этот функционал!
    Надеюсь на вашу помощь!
     
  2. ixoyz

    ixoyz Member

    Регистрация:
    12 май 2012
    Сообщения:
    16
    Симпатии:
    0
    Поясни задачу:
    Что на что меняем и в каких случаях?
    Если в п.3 ввели 1 тогда ..., если 0 тогда ....

    А ошибка в этой строке:
    Код (C++):
            type.a[k_num_bits/8] = type.a[k_num_bits/8]^(1<<(k_num_bits-8*(k_num_bits/8)));
    Должно быть так:
    Код (C++):
          if (number)
    type.a[k_num_bits/8] = type.a[k_num_bits/8]^(1<<(k_num_bits-8*(k_num_bits/8))); // при условии, что это верно для number=1
    else
    /*Код для number=0*/;
     
Загрузка...

Поделиться этой страницей