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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
KupueIIIKo
2 / 2 / 0
Регистрация: 15.09.2010
Сообщений: 127
#1

Битовые операции - C++

12.05.2011, 09:48. Просмотров 1516. Ответов 21
Метки нет (Все метки)

Есть число в двоичной системе, например "01000001", рядом с единицами надо заменить нули на единички! то есть должно получится например "11100011"! Помогите нашкодить!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2011, 09:48     Битовые операции
Посмотрите здесь:

Битовые операции - C++
Доброго времени суток! Есть задача: Даны два целых без знаковых числа. Остатки от деления их на 16 заносятся соответственно в 4 младших и...

Битовые операции - C++
Народ дайте ссылку пожалуйста на задачи по сишке где нужно использовать битовые операции! Желательно с решениями!

Битовые операции - C++
Есть код signed int a = 10; a = !a; cout << a; Выводит 0, объясните, почему??

Битовые операции - C++
Здраствуйте, помогите, пожалуйста! Надо написать три функции, используя только битовые (для первых двух) и только битовые и...

Битовые операции - C++
#include<iostream> #include<climits> int main() { unsigned int a = UINT_MAX; unsigned short b = USHRT_MAX; std::cout <<...

Битовые операции - C++
Всем привет! Помогите решить интересную задачу! Нужно ниже указный код переписать без условных операторов используя только битовые операции...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт С++
1039 / 818 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
12.05.2011, 09:56     Битовые операции #2
Дык это строка или число?
Если число, то это просто:
C++
1
2
3
int a = 5;
a = ~a;
a = -a;
Либо так, либо эдак.
KupueIIIKo
2 / 2 / 0
Регистрация: 15.09.2010
Сообщений: 127
12.05.2011, 10:12  [ТС]     Битовые операции #3
~ делает побитовое инвертирование
- унарный минус
все нето!

Данный байт хранится допустим в переменной А; в шестнадцатеричном коде! Вообщем мы его переводим в двоичку! Находим единичку! Соседние биты тоже делаем единицами!
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.05.2011, 10:56     Битовые операции #4
Цитата Сообщение от KupueIIIKo
Вообщем мы его переводим в двоичку!
в строковое представление ?
тогда можно сделать простой цикл

C
1
2
3
4
5
6
7
8
9
10
    char num[100] = "010010010";
    int len = strlen(num);
 
    for (i = 0; i < len; i++)
        if (num[i] == '1') {
            if (i > 0 && num[i - 1] != '1')
                num[i - 1] = '1';
            if (i + 1 < len && num[i + 1] != '1')
                num[i + 1] = '1';
        }
KupueIIIKo
2 / 2 / 0
Регистрация: 15.09.2010
Сообщений: 127
12.05.2011, 11:01  [ТС]     Битовые операции #5
Цитата Сообщение от accept Посмотреть сообщение
в строковое представление ?
тогда можно сделать простой цикл

C
1
2
3
4
5
6
7
8
9
10
    char num[100] = "010010010";
    int len = strlen(num);
 
    for (i = 0; i < len; i++)
        if (num[i] == '1') {
            if (i > 0 && num[i - 1] != '1')
                num[i - 1] = '1';
            if (i + 1 < len && num[i + 1] != '1')
                num[i + 1] = '1';
        }
представление не строковое! но можно и так! спс! осталось цифру в массив и обратно в цифру загнать )
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.05.2011, 11:11     Битовые операции #6
Цитата Сообщение от KupueIIIKo
представление не строковое! но можно и так!
Цитата Сообщение от KupueIIIKo
Есть число в двоичной системе
если представление не строковое, то непонятно тогда, где есть число в двоичной системе
KupueIIIKo
2 / 2 / 0
Регистрация: 15.09.2010
Сообщений: 127
12.05.2011, 11:33  [ТС]     Битовые операции #7
Пишу прогу под микроконтроллер! Я получаю в переменную "a" значение например "0x3A" = "00111010", где каждый бит соответствует логическому нулю или единице на ножке микроконтроллера. Вот мне надо вывести на соседние ножки единички )
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
12.05.2011, 13:58     Битовые операции #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
   int short num, mask = 0;
   int sz;
   ...
   sz = sizeof(num)*8;
 
   if (num&2)
      mask |= 1;
   for (int i = 1; i < sz; i++)
   {
      if ((num&(1<<i)) == 0 && (num&(5<<(i-1))))
         mask |= (1 << i);
   }
   num |= mask;
ValeryLaptev
Эксперт С++
1039 / 818 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
12.05.2011, 15:37     Битовые операции #9
Цитата Сообщение от KupueIIIKo Посмотреть сообщение
~ делает побитовое инвертирование
- унарный минус
все нето!

Данный байт хранится допустим в переменной А; в шестнадцатеричном коде! Вообщем мы его переводим в двоичку! Находим единичку! Соседние биты тоже делаем единицами!
Пардон, пропустил слово "рядом".
Но переводить ничего не надо, если число не в виде строки.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.05.2011, 03:09     Битовые операции #10
Цитата Сообщение от KupueIIIKo
Я получаю в переменную "a" значение например "0x3A" = "00111010"
я бы делал тогда символьный массив, но хранил бы там числа
C
1
2
    char n[100] = { 0, 0, 1, 1, 1, 0, 1, 0 };
    int nsize = 8;
в него можно записать произвольное количество бит в таком виде, и для него можно разработать функции совсем не запутанные
resource2008
109 / 109 / 2
Регистрация: 11.03.2011
Сообщений: 421
13.05.2011, 03:30     Битовые операции #11
под микроконтроллер лучше наверное писать на асм-е.
KupueIIIKo
2 / 2 / 0
Регистрация: 15.09.2010
Сообщений: 127
13.05.2011, 08:16  [ТС]     Битовые операции #12
ну а байт как ты загонишь в массив?

на асме писать дело неблагодарное )
mimicria
return (true);
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
13.05.2011, 08:29     Битовые операции #13
Цитата Сообщение от KupueIIIKo Посмотреть сообщение
ну а байт как ты загонишь в массив?
Битовыми полями
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.05.2011, 08:48     Битовые операции #14
Цитата Сообщение от KupueIIIKo
ну а байт как ты загонишь в массив?
в цикле сдвигаешь вправо и берёшь крайний бит (для этого делается отдельная функция, как и для обратного перевода)
в результате ты представляешь набор битов, как массив чисел, с которым можно работать
при этом не нужно тратить время на размышления о том "1) а как бы мне взять только определённые биты 2) а сколько там битов в одном байте 3) а как бы мне откомментировать теперь код, чтобы я потом сам же и разобрался в нём за полминуты"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2011, 09:00     Битовые операции
Еще ссылки по теме:

Битовые операции - C++
Приветствую! Изучаю C++, не могу освоить битовые операции (перемещение, исключающие или, инвертирование всякое). Просто не понимаю...

Битовые операции - C++
Не могу разобраться с 4 заданием Реализовал пятое но не в одну строчку и без понятия как сделать в одну П.5.18.Правил Запрещено...

Битовые операции - C++
С помощью битовых операций выести на экран значение к-ого спарва бита. Помогите пожалуйста!что-то в этих битовых операциях не...

Битовые операции - C++
Здравствуйте! нужно решить задачу: в целом числе заменить младший бит старшего байта на 1 решается ли это битовыми сдвигами? и...


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

Или воспользуйтесь поиском по форуму:
mimicria
return (true);
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
13.05.2011, 09:00     Битовые операции #15
Цитата Сообщение от accept Посмотреть сообщение
в строковое представление ?
тогда можно сделать простой цикл

C
1
2
3
4
5
6
7
8
9
10
    char num[100] = "010010010";
    int len = strlen(num);
 
    for (i = 0; i < len; i++)
        if (num[i] == '1') {
            if (i > 0 && num[i - 1] != '1')
                num[i - 1] = '1';
            if (i + 1 < len && num[i + 1] != '1')
                num[i + 1] = '1';
        }
Это кстати неверно. Следующий элемент делаем единицей num[i + 1] = '1'; и на след.итерации цикла она будет учитываться. Таким образом за первой попавшейся единицей пойдут все. Так что лучше делать временный массив и результат хранить в нём
Yandex
Объявления
13.05.2011, 09:00     Битовые операции
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru