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

doojkee

New Member
08.04.2012
3
0
#1
Добрый вечер, форумчане, нужна ваша помощь, никак не могу додуматься, как сделать это задание:

Установить в заданные пользователем значения некоторые разряды, количество которых и номера разрядов задаются с клавиатуры.

Более подробно:

1.вводим число
2.переводим его в 2ую систему
3.вводим 1 или 0
4.вводим число разрядов
5.вводим номера разрядов
6.заменяем в введенных разрядах значения 1 или 0 (в зависимости, от того, что мы ввели в п.3);
7.выводим измененное число


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

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, я не знаю, как дописать этот функционал!
Надеюсь на вашу помощь!
 

ixoyz

Member
12.05.2012
16
0
#2
Поясни задачу:
6.заменяем в введенных разрядах значения 1 или 0 (в зависимости, от того, что мы ввели в п.3);
Что на что меняем и в каких случаях?
Если в п.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*/;