Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
12 / 7 / 3
Регистрация: 06.01.2013
Сообщений: 127

Битовые операции (написать функцию для сброса в ноль двух битов с заданными номерами в коде символа)

23.06.2013, 22:23. Показов 1842. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот наткнулся на интересную задачку:
"Написать функцию для сброса в ноль двух битов с заданными номерами в коде символа"

Во-первых мне не очень понятно, что тут от меня хотят, вы можете написать код и объяснить на "человеческом" языке, что тут подразумевается?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.06.2013, 22:23
Ответы с готовыми решениями:

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

Используя только битовые операции, написать функцию
Помогите: Используя только битовые операции, написать функцию, которая возвращает единицу, если биты в 2 - х заданных позициях...

Используя только битовые операции, написать функцию, которая возвращает значение
Используя только битовые операции, написать функцию, которая возвращает значение (0 - при отрицательном значении параметра x, значение...

6
С++ Beginner
 Аватар для MarVaL
120 / 120 / 77
Регистрация: 28.02.2013
Сообщений: 246
23.06.2013, 22:53
Быдло:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
 
struct BitMap {
  bool b0: 1; bool b1: 1; bool b2: 1; bool b3: 1;
  bool b4: 1; bool b5: 1; bool b6: 1; bool b7: 1;
};
 
union uBitMap {
  BitMap bm;
  int x;
} ubm;
 
void edit(int i);
void print();
 
int main() {
  setlocale(0, "");
  
  int x;
  
  std::cout << "Введите число: ";
  std::cin >> x;
  
  ubm.x = x;
  
  print();
  
  std::cout << "\nКакие два бита занулить (0-7): ";
  int i1, i2;
  std::cin >> i1 >> i2;
  
  edit(i1);
  edit(i2);
  print();
  
  return 0;
}
 
void print() {
  std::cout << "В битах: " << ubm.bm.b7 << ubm.bm.b6 << ubm.bm.b5 << ubm.bm.b4 
  << ubm.bm.b3 << ubm.bm.b2 << ubm.bm.b1 << ubm.bm.b0 << std::endl;
}
 
void edit(int i) {
  switch(i) {
  case 0:
    ubm.bm.b0 = 0;
    break;
  case 1:
    ubm.bm.b1 = 0;
    break;
  case 2:
    ubm.bm.b2 = 0;
    break;
  case 3:
    ubm.bm.b3 = 0;
    break;
  case 4:
    ubm.bm.b4 = 0;
    break;
  case 5:
    ubm.bm.b5 = 0;
    break;
  case 6:
    ubm.bm.b6 = 0;
    break;
  case 7:
    ubm.bm.b7 = 0;
    break;
  default:
    std::cout << "Неверный ввод" << std::endl;
  }
}
1
 Аватар для Expocooky
56 / 56 / 6
Регистрация: 06.06.2013
Сообщений: 112
23.06.2013, 23:27
А где битовые операции?
1
12 / 7 / 3
Регистрация: 06.01.2013
Сообщений: 127
23.06.2013, 23:28  [ТС]
Ой, жутко сложно и не понятно, честно говоря мне не совсем понятно даже само задание, так что пожалуйста не могли бы вы пояснить мне и само задание (что требуется) и объяснить как подобное реализуется, так сказать теоретическая сторона вопроса тоже важна
Спасибо)
0
С++ Beginner
 Аватар для MarVaL
120 / 120 / 77
Регистрация: 28.02.2013
Сообщений: 246
23.06.2013, 23:30
Цитата Сообщение от Expocooky Посмотреть сообщение
А где битовые операции?
В названии темы

Добавлено через 1 минуту
Цитата Сообщение от Wladius Посмотреть сообщение
не могли бы вы пояснить мне и само задание
Я предположил что так...
1
12 / 7 / 3
Регистрация: 06.01.2013
Сообщений: 127
24.06.2013, 06:48  [ТС]
Нужно именно с битовыми операциями

Добавлено через 12 минут
До сих пор нужна помощь с заданием именно с битовыми операциями, вы хотя бы попытайтесь объяснить как это нужно сделать, я тогда и сам попытаюсь

Добавлено через 1 час 1 минуту
up.

Добавлено через 6 часов 0 минут
up.
0
 Аватар для Гром
212 / 131 / 28
Регистрация: 20.03.2009
Сообщений: 1,123
Записей в блоге: 16
24.06.2013, 08:21
Начнем от печки. Битовые операции - это И (&), ИЛИ (|) и НЕ (!). Результатом a & b будет число, в котором i-й бит равен единице, если в обоих числах a и b этот же i-й бит равен единице и нулю во всех остальных случаях. Результат a | b - число, где бит равен нулю, если оба бита равны нулю и единице во всех остальных случаях (когда бит a или бит b равен единице). !a - число, у которого все биты заменены на противоположные.

Заметьте, что x | 0 == x (1 | 0 == 1, 0 | 0 == 0) (при использовании ИЛИ с нулем бит не меняется), x | 1 == 1 (при использовании ИЛИ с единицей бит устанавливается в 1), x & 1 == x (1 & 1 == 1, 0 & 1 == 0) (при использовании И с единицей бит не меняется), x & 0 == 0 (при использовании И с нулем бит устанавливается в 0).

Также есть битовые сдвиги - когда биты в числе сдвигают на сколько-то позиций вправо или влево, при этом если биты выходят за пределы числа (в восьмибитном числе бит передвинулся на позицию 9+ или отрицательную) - они теряются, а биты, которые "пришли из-за предела числа" становятся нулями. Например,
C++
1
2
3
4
11001100 >> 1 == 01100110
11001100 >> 2 == 00110011
11000111 << 1 == 10001110
11111111 << 7 == 10000000
Пользуясь этим, мы можем обращаться к отдельным битам числа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int set_2nd_bit_1(int x)
{
return x | 2;   //в двоичном представлении 2 - это 00000010, поэтому все биты числа x, кроме второго остаются неизменными, а второй устанавливается в 1
}
 
int set_2nd_bit_0(int x)
{
return x & (!2);   //!2 - это 11111101, поэтому все биты числа x, кроме второго остаются неизменными, а второй устанавливается в 0
}
 
bool is_2nd_bit_1(int x)
{
return x & 2;   //двойка - это 00000010, поэтому все биты, кроме второго сбрасываются в ноль, а второй остается неизменным. Если он был нулем, получим 0, если нет - получим двойку (00000010), которая отлична от нуля, поэтому при преобразовании к bool будет true
}
С помощью битовых сдвигов можно обращаться к произвольному биту:
C++
1
2
3
4
set_bit_1(int x, int n_bit)
{
return x | (1 << n_bit);   //1 - это 00000001, сдвигая на n_bit позиций (считая первый бит нулевым), получим число с единицей в n_bit разряде. В результате устанавливаем бит в этом разряде в единицу
}
Таким образом, сдвигая единицу на n разрядов, мы можем обращаться к n-му биту - вместо 2 в первых примерах будет (1 << n) ( в том числа x & (! (1 << n)) ).

Ну и, естественно, помним, что int имеет все-таки не восемь бит, а как правило 32 (4 байта).
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.06.2013, 08:21
Помогаю со студенческими работами здесь

Написать функцию, которая меняет местами элементы с заданными номерами
lst = def swap_elemets(lst, x , y): xt, yt = lst, lst lst, lst = yt, xt return lst print('Результат замены...

Написать функцию, которая меняет местами элементы с заданными номерами
Написать функцию, которая меняет местами элементы с заданными номерами заданного списка или одномерного массива. Заранее спасибо большое!!

Битовые операции: количество нулевых и единичных битов в целом неотрицательном числе
Вывести количество нулевых и единичных битов в целом неотрицательном числе.

Произвести в двоичном представлении числа обмен битов с заданными номерами
Дано короткое целое неотрицательное число. Произвести в его двоичном представлении обмен битов с номерами 0 и 1, 2 и 3, 4 и 5 и т.д. ...

Битовые операции: вывести сначала значения битов числа с чётными индексами, а затем - с нечётными
пусть дано целое число a. Вывести вначале значение его битов с чётными индексами , а затем - с нечётными хелп плиз


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru