Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

Битовые операции, битовые поля. - C++
Здравствуйте! Еслть 4 диапазона чисел: 0-100, 0-100, 0-6000, 0-3. Сделать в виде битовых операций. Записать в unsigned int. Использовать...

Битовые операции и операции смещения языка С - C++
Доброго времени суток господа,помогите пожалуйста.Есть 2 кода к задаче,первый работает верно(переводит обычные числа в 16-ти ричные),а...

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

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

битовые операции - C++
надо написать ф-цию, которая в данном числе(в двоичной с.с.) на заданном номере ставила 1, вместо 0

Битовые операции - C++
Имеется число int x = 85; // 1010101 - двоичное представление // 6543210 - номера битов // нужно взять // 0,2,3,4 биты и сложить...

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

Данный байт хранится допустим в переменной А; в шестнадцатеричном коде! Вообщем мы его переводим в двоичку! Находим единичку! Соседние биты тоже делаем единицами!
0
accept
4825 / 3246 / 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';
        }
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';
        }
представление не строковое! но можно и так! спс! осталось цифру в массив и обратно в цифру загнать )
0
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.05.2011, 11:11 #6
Цитата Сообщение от KupueIIIKo
представление не строковое! но можно и так!
Цитата Сообщение от KupueIIIKo
Есть число в двоичной системе
если представление не строковое, то непонятно тогда, где есть число в двоичной системе
0
KupueIIIKo
2 / 2 / 0
Регистрация: 15.09.2010
Сообщений: 127
12.05.2011, 11:33  [ТС] #7
Пишу прогу под микроконтроллер! Я получаю в переменную "a" значение например "0x3A" = "00111010", где каждый бит соответствует логическому нулю или единице на ножке микроконтроллера. Вот мне надо вывести на соседние ножки единички )
0
kazak
3048 / 2369 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
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;
0
ValeryLaptev
Эксперт С++
1042 / 821 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
12.05.2011, 15:37 #9
Цитата Сообщение от KupueIIIKo Посмотреть сообщение
~ делает побитовое инвертирование
- унарный минус
все нето!

Данный байт хранится допустим в переменной А; в шестнадцатеричном коде! Вообщем мы его переводим в двоичку! Находим единичку! Соседние биты тоже делаем единицами!
Пардон, пропустил слово "рядом".
Но переводить ничего не надо, если число не в виде строки.
0
accept
4825 / 3246 / 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;
в него можно записать произвольное количество бит в таком виде, и для него можно разработать функции совсем не запутанные
0
resource2008
109 / 109 / 2
Регистрация: 11.03.2011
Сообщений: 421
13.05.2011, 03:30 #11
под микроконтроллер лучше наверное писать на асм-е.
0
KupueIIIKo
2 / 2 / 0
Регистрация: 15.09.2010
Сообщений: 127
13.05.2011, 08:16  [ТС] #12
ну а байт как ты загонишь в массив?

на асме писать дело неблагодарное )
0
mimicria
return (true);
1958 / 1095 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
13.05.2011, 08:29 #13
Цитата Сообщение от KupueIIIKo Посмотреть сообщение
ну а байт как ты загонишь в массив?
Битовыми полями
0
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.05.2011, 08:48 #14
Цитата Сообщение от KupueIIIKo
ну а байт как ты загонишь в массив?
в цикле сдвигаешь вправо и берёшь крайний бит (для этого делается отдельная функция, как и для обратного перевода)
в результате ты представляешь набор битов, как массив чисел, с которым можно работать
при этом не нужно тратить время на размышления о том "1) а как бы мне взять только определённые биты 2) а сколько там битов в одном байте 3) а как бы мне откомментировать теперь код, чтобы я потом сам же и разобрался в нём за полминуты"
0
mimicria
return (true);
1958 / 1095 / 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'; и на след.итерации цикла она будет учитываться. Таким образом за первой попавшейся единицей пойдут все. Так что лучше делать временный массив и результат хранить в нём
1
13.05.2011, 09:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2011, 09:00
Привет! Вот еще темы с ответами:

Битовые операции - C++
Ребят, нужен алгоритм, а желательно и код для реализации следующей функции: Есть скажем числа от 0 до 7, т.е. 8 (2^3) Теперь...

Битовые операции - C++
Ребят, помогите кто чем может. Дана строка unsigned char. Необходимо через каждых 4 бита вставить 1, при этом ничего не затерев. ...

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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