Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Wladius
12 / 7 / 2
Регистрация: 06.01.2013
Сообщений: 127
23.06.2013, 22:23     Битовые операции (написать функцию для сброса в ноль двух битов с заданными номерами в коде символа) #1
Вот наткнулся на интересную задачку:
"Написать функцию для сброса в ноль двух битов с заданными номерами в коде символа"

Во-первых мне не очень понятно, что тут от меня хотят, вы можете написать код и объяснить на "человеческом" языке, что тут подразумевается?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2013, 22:23     Битовые операции (написать функцию для сброса в ноль двух битов с заданными номерами в коде символа)
Посмотрите здесь:

C++ Битовые операции. Написать программу для хранения в битовом поле информации о конфигурации компьютера.
Битовые операции, битовые поля. C++
C++ Битовые операции - перемещение бит для unsigned int
C++ Функции. побитовые операции. Написать функцию, которая для заданного целого числа Х вычисляет количество единичных битов в этом числе
Написать функцию, которая для заданного числа Х вычисляет количество единичных битов в этом числе C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 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;
  }
}
Expocooky
 Аватар для Expocooky
56 / 56 / 2
Регистрация: 06.06.2013
Сообщений: 112
23.06.2013, 23:27     Битовые операции (написать функцию для сброса в ноль двух битов с заданными номерами в коде символа) #3
А где битовые операции?
Wladius
12 / 7 / 2
Регистрация: 06.01.2013
Сообщений: 127
23.06.2013, 23:28  [ТС]     Битовые операции (написать функцию для сброса в ноль двух битов с заданными номерами в коде символа) #4
Ой, жутко сложно и не понятно, честно говоря мне не совсем понятно даже само задание, так что пожалуйста не могли бы вы пояснить мне и само задание (что требуется) и объяснить как подобное реализуется, так сказать теоретическая сторона вопроса тоже важна
Спасибо)
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
23.06.2013, 23:30     Битовые операции (написать функцию для сброса в ноль двух битов с заданными номерами в коде символа) #5
Цитата Сообщение от Expocooky Посмотреть сообщение
А где битовые операции?
В названии темы

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

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

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

Добавлено через 6 часов 0 минут
up.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2013, 08:21     Битовые операции (написать функцию для сброса в ноль двух битов с заданными номерами в коде символа)
Еще ссылки по теме:

Написать функцию, которая для заданого целого числа Х вычисляет количество пар (расположенных друг за другом) нулевых битов в этом числе C++
Написать функцию, которая для заданного x посчитает количество единичных битов в этом числе. C++
C++ Битовые операции, найти ошибку в коде

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

Или воспользуйтесь поиском по форуму:
Гром
 Аватар для Гром
199 / 118 / 10
Регистрация: 20.03.2009
Сообщений: 1,075
Записей в блоге: 15
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 байта).
Yandex
Объявления
24.06.2013, 08:21     Битовые операции (написать функцию для сброса в ноль двух битов с заданными номерами в коде символа)
Ответ Создать тему
Опции темы

Текущее время: 10:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru