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

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

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

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

12.05.2011, 09:48. Просмотров 1530. Ответов 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 биты и сложить...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.05.2011, 09:19 #16
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string.h>
 
int main(void)
{
    char num[100] = "001001100000001"; /* 011111110000011 */
    int len = strlen(num);
    int i;
    
    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'
                i++;
            }
        }
    printf("%s\n", num);
    return 0;
}
1
mimicria
return (true);
1957 / 1094 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
13.05.2011, 09:22 #17
Ошибка
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.05.2011, 09:32 #18
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
#include <stdio.h>
#include <string.h>
 
void convert_bits(char *s, int len);
 
int main(void)
{
    char nums[][100] =  {
        "001001100000001",
        "001001000100011"
    };
    int nn = sizeof nums / sizeof nums[0];
    int i;
    
    for (i = 0; i < nn; i++) {
        char *p = nums[i];
        printf("%s ", p);
        convert_bits(p, strlen(p));
        printf("%s\n", p);
    }
    return 0;
}
 
void convert_bits(char *s, int len)
{
    int i;
    
    for (i = 0; i < len; i++)
        if (s[i] == '1') {
            if (i > 0 && s[i - 1] != '1')
                s[i - 1] = '1';
            if (i + 1 < len && s[i + 1] != '1') {
                s[i + 1] = '1';
                i++;
            }
        }
}
Код
[guest@localhost tests]$ ./t
001001100000001 011111110000011
001001000100011 011111101110111
[guest@localhost tests]$
1
mimicria
return (true);
1957 / 1094 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
13.05.2011, 09:41 #19
Ну тож выложу, как вариант
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
#include <vcl.h>
#include <iostream.h>
#include <math.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
 
byte BB(WORD A, byte N)
{
 return ((A>>N)&0x01);
}
 
int main()
{
 WORD n;
 cout << "Enter number: ";
 cin >> n;
 byte s[8];
 byte ss[8]={0,};
 int i;
 cout<<"Old binary: ";
 for (i = 7; i >=0; i--)
 {
  s[i]=BB(n,i);
  cout << (int)s[i];
 }
 for (i = 0; i < 8; i++)
 {
  if (s[i])
  {
   if (i==0) {ss[i+1]=1;ss[i]=1;}
   else if (i==7) {ss[i-1]=1;ss[i]=1;}
   else { ss[i-1]=1; ss[i]=1; ss[i+1]=1;}
  }
 }
 WORD nn=0;
 cout << "\nNew binary: ";
 for (i = 7; i >=0; i--)
 {
  cout << (int)ss[i];
  nn+=ss[i]*pow(2,i);
 }
 cout << "\nNew number: " << (int)nn << endl;
 system ("pause");
 return 0;
}
1
KupueIIIKo
2 / 2 / 0
Регистрация: 15.09.2010
Сообщений: 127
13.05.2011, 09:48  [ТС] #20
еще 1 минус у меня! strlen - у меня нету такой команды )

Добавлено через 52 секунды
Вообщем перехожу на математику сижу считаю как это сделать с помощью цифр! если сделаю отпишусь!

Добавлено через 49 секунд
просто я юзаю winavr он обладает специфическим C
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.05.2011, 10:33 #21
Цитата Сообщение от KupueIIIKo
strlen - у меня нету такой команды
strlen() - это функция из string.h
во всех C она должна быть

я уже это превратил в другую функцию, откомментил
convert_bits.c
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* заменяет нули возле единиц единицами
   00001000 -> 00011100
 */
void convert_bits(char *s, int len)
{
    int i;
    
    for (i = 0; i < len; i++)
        if (s[i] == 1) {
            if (i > 0 && s[i - 1] != 1)
                s[i - 1] = 0;
            if (i + 1 < len && s[i + 1] != 1) {
                s[i + 1] = 1;
                i++;
            }
        }
}
Добавлено через 4 минуты
вот представь, что тебе надо проделать это с 27'ю битами
ты создаёшь массив, заполняешь его 27'ю битами и вызываешь функцию conver_bits(arr, 27);
при этом тебе не надо думать про кратность этих битов, сколько там байт получается и так далее
1
KupueIIIKo
2 / 2 / 0
Регистрация: 15.09.2010
Сообщений: 127
13.05.2011, 10:54  [ТС] #22
Цитата Сообщение от mimicria Посмотреть сообщение
Ну тож выложу, как вариант
Очень помогло в другом кодинге! Большое спасибо!

accept спасибо большое! твой код как и mimicria пригодился в другой части)

Добавлено через 4 минуты
когда пишешь на мк там не совсем чистый с! поэтому кому если пригодится для программирования мк фирмы atmel! Есть такая возможность как
C
1
2
#define sbi(reg, bit) (reg|= (1<<bit)) //установить бит регистра reg
#define sbni(reg, bit) (reg|= (0<<bit)) //стереть бит регистра reg
если писать по прямой то он и представляет как число переведенное в двоичное число, если юзать дефайн, то получается почему то обращение к определеной ножке мк! ну а там уже я сделал просто
i++; i--
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2011, 10:54
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.05.2011, 10:54
Ответ Создать тему
Опции темы

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