• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы doojkee
  • Дата начала
D

doojkee

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

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

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

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

ixoyz

Поясни задачу:
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*/;
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!