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

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

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

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

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

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

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

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

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

6
С++ Beginner
120 / 120 / 77
Регистрация: 28.02.2013
Сообщений: 246
23.06.2013, 22:53 2
Быдло:
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
56 / 56 / 6
Регистрация: 06.06.2013
Сообщений: 112
23.06.2013, 23:27 3
А где битовые операции?
1
12 / 7 / 3
Регистрация: 06.01.2013
Сообщений: 127
23.06.2013, 23:28  [ТС] 4
Ой, жутко сложно и не понятно, честно говоря мне не совсем понятно даже само задание, так что пожалуйста не могли бы вы пояснить мне и само задание (что требуется) и объяснить как подобное реализуется, так сказать теоретическая сторона вопроса тоже важна
Спасибо)
0
С++ Beginner
120 / 120 / 77
Регистрация: 28.02.2013
Сообщений: 246
23.06.2013, 23:30 5
Цитата Сообщение от Expocooky Посмотреть сообщение
А где битовые операции?
В названии темы

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

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

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

Добавлено через 6 часов 0 минут
up.
0
212 / 131 / 28
Регистрация: 20.03.2009
Сообщений: 1,123
Записей в блоге: 16
24.06.2013, 08:21 7
Начнем от печки. Битовые операции - это И (&), ИЛИ (|) и НЕ (!). Результатом 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
24.06.2013, 08:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.06.2013, 08:21
Помогаю со студенческими работами здесь

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

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

Произвести в двоичном представлении числа обмен битов с заданными номерами
Дано короткое целое неотрицательное число. Произвести в его двоичном представлении обмен битов с...

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

Битовые операции. Написать программу для хранения в битовом поле информации о конфигурации компьютера.
1. Написать программу для хранения в битовом поле информации о конфигурации компьютера. Например:...

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru