С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/88: Рейтинг темы: голосов - 88, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 43

Операции с битами. Изменить значение указанного бита произвольного целого числа на противоположное...

25.04.2019, 14:26. Показов 17566. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, буду рад любой помощи. Советы, подсказки, отдельные части кода, ссылки на полезные ресурсы.

Мне необходимо написать программу, которая изменяет значение указанного бита произвольного целого числа на противоположное (1 на 0, 0 на 1). Программа должна предоставлять возможность вводить различные целые числа, номер бита n (биты нумеруются справа на левый) и выводить результат как в десятичном, так и в двоичном виде.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.04.2019, 14:26
Ответы с готовыми решениями:

Написать функцию, изменяющую значение n-го бита на противоположное
Написать функцию, изменяющую значение n-го бита на противоположное. Значение принять с клавиатуры и проверить на корректность

Из произвольного целого числа или длинного целого числа, вводимого с клавиатуры, путем изменения цифр 0 или 1
Произвольное длинное целое число разделить на четыре однобайтовых целых числа, каждому из которых поставить в соответствие символ.

Извлечь 3 бита целого числа A с позиции n и перенести в число B на позицию m
Доброго времени суток.Дана вот такая задача : извлечь 3 бита числа А, начиная с позиции n, и вставить их в число В, начиная с позиции...

9
Злостный нарушитель
 Аватар для Verevkin
10251 / 5677 / 1262
Регистрация: 12.03.2015
Сообщений: 26,312
25.04.2019, 14:42
Ахтунг! Не отлаживал! Писал на заборе!
C++
1
2
3
4
5
6
7
// функция изменяет значение указанного бита произвольного целого числа 
// на противоположное
int invert_bit(const int x, const char bit)
{
  int mask = 1 << bit;
  return (x & mask) ? (x & ~mask) : (x | mask); // скобки - для читабельности
}
0
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 43
25.04.2019, 14:54  [ТС]
Verevkin, спасибо за ответ. Не могли бы вы пройтись по строкам вашей функции с объяснениями?
0
Злостный нарушитель
 Аватар для Verevkin
10251 / 5677 / 1262
Регистрация: 12.03.2015
Сообщений: 26,312
25.04.2019, 15:00
Цитата Сообщение от Hellgrove Посмотреть сообщение
Не могли бы вы пройтись по строкам вашей функции с объяснениями?
АХАХАХА, так и знал!
-------
Чо не понятно? Спрашивай.
0
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
25.04.2019, 15:34
Лучший ответ Сообщение было отмечено Hellgrove как решение

Решение

Для того, чтобы инвертировать n−ый бит числа можно использовать следующее выражение: A = A XOR (1 << N):

C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
#define BIT_TOGGLE(a, n) ((a) ^= 1UL << (n));
 
int main(void)
{
    unsigned char number = 8;
    printf("%u", number); // 8
 
    BIT_TOGGLE(number, 3);
    printf("%u", number); // 0
}
Добавлено через 12 минут
Чтобы понять, как это работает, разберем небольшой пример:

Пусть A = 0000 10002 (810), N = 3.

Тогда 1 << N = 0000 0001 << 3 = 0000 1000. Далее —

C
1
2
3
  0000 1000 XOR
  0000 1000
= 0000 0000
2
Злостный нарушитель
 Аватар для Verevkin
10251 / 5677 / 1262
Регистрация: 12.03.2015
Сообщений: 26,312
25.04.2019, 16:31
Цитата Сообщение от Eanmos Посмотреть сообщение
Для того, чтобы инвертировать n−ый бит числа можно использовать следующее выражение: A = A XOR (1 << N):
И то верно. чот я тормознул. бывает...
0
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 43
25.04.2019, 18:30  [ТС]
Eanmos, что происходит в 3 строчке кода?

Добавлено через 12 минут
Eanmos, допустим, пользователь ввел число 23. В двоичном виде это 10111. Теперь пользователь хочет заменить последний бит. Как получить 10110?

Добавлено через 30 минут
Eanmos, разобрался сам. Мне осталось только понять, как любое введенное число в десятичном виде представить в двоичном.

Добавлено через 23 секунды
Verevkin, вы тоже можете помочь в этом.
0
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
25.04.2019, 19:42
Можно вот так, например:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <limits.h>
 
static char *byte_to_binary(unsigned char number)
{
    static char binary[CHAR_BIT + 1];
    binary[0] = '\0';
 
    for (unsigned char t = 128, i = 0; t > 0; t >>= 1, i++)
        binary[i] = (number & t) ? '1' : '0';
 
    return binary;
}
 
int main(void)
{
    for (unsigned char i = 0; i < 255; i++)
        puts(byte_to_binary(i));
}
1
0 / 0 / 0
Регистрация: 08.11.2018
Сообщений: 43
25.04.2019, 19:57  [ТС]
Eanmos, я несколько минут назад доделал уже) Спасибо вам за помощь. Кстати, то, что было непонятным в вашем первом сообщении, стало понятнее после пары часов работы)
0
Злостный нарушитель
 Аватар для Verevkin
10251 / 5677 / 1262
Регистрация: 12.03.2015
Сообщений: 26,312
25.04.2019, 20:44
Цитата Сообщение от Hellgrove Посмотреть сообщение
Verevkin, вы тоже можете помочь в этом.
Я был занят. Но свою функцию отдам.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// перевод беззнакового целого х в двоичное представление,
// дополняя слева нулями до длины z.
// Память не выделяет, размер буфера не проверяет! НЕ ЛОХАНИТЕСЬ. :))
char* uint32_to_bin(char* buf, unsigned x, unsigned char z)
{
  unsigned len = 0, temp = x;
  do len++, temp >>= 1; while (temp);
  
  if (z > len) len = z;
  memset(buf, '0', len);
  buf[len] = 0;
  char* ptr = buf + len - 1;
  while (x) *ptr-- = 0x30 + (x & 1), x >>= 1;
  return buf;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.04.2019, 20:44
Помогаю со студенческими работами здесь

Факториал произвольного целого числа
Не могу посчитать факториал больше 20, с чем это может быть связанно? подскажите пожалуйста program Project1; {$APPTYPE CONSOLE} ...

Получение значение сдвигаемого бита при операции логического сдвига влево
int a = Convert.ToInt32(&quot;110100110000&quot;, 2); int reg =a&lt;&lt;1; подскажите,пожалуйста,как получить значение...

Определение суммы цифр произвольного целого числа
надо разработать подпрограмму для определения суммы цифр произвольного целого числа и с помощью этой подпрограммы определить сумму цифр...

Создать 2 переменные, одна из которых хранит 2 старших бита исходного числа, другая 2 младших бита этого числа
Дано число. Создать 2 переменные, одна из которых хранит 2 старших бита исходного числа, другая 2 младших бита этого числа. код частично...

Определить количество нечётных цифр произвольного целого отрицательного числа
Определить количество нечётных цифр произвольного целого отрицательного числа.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru