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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.61
mexmet20
1 / 1 / 0
Регистрация: 15.05.2011
Сообщений: 16
#1

Работа с битами - C++

01.06.2011, 09:02. Просмотров 3182. Ответов 28
Метки нет (Все метки)

три раза писал но все равно не получается(((
1-)Ввести последовательность из 8 символов. Сравнить 5-й и 6-й биты каждого символа. Если они не равны, то сделать их равными младшему биту, иначе - старшему.
Вывести исходную последовательность, ее восьмеричные коды; преобразованную последовательность и ее восьмеричные коды.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2011, 09:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с битами (C++):

Работа с битами И Работа с символьными данными - C++
1. Ввести 8 символов. В символе с наибольшим кодом заменить 5-й бит единицей, а в символе с наименьшим кодом 6-й бит - нулем. Вывести...

работа с битами - C++
доброй ночи, форумчане, необходима ваша помощь) как и всем тут... вот изучаю с++ и добрался до работы с битами, учу решением задач. на...

Работа с битами - C++
Не могу понять, почему не правильно работает программа. Программа зашифровывает строку, выводит, потом расшифровывает и выводит. ...

Работа с битами - C++
Я уже задолбался... :wall: Может мне кто нибудь подскажет как из 00111010 (58) получить 00001010 (10) хотя бы каким методом... код...

Работа с битами. - C++
Здрасте. Дана задача: Определить на сколько в числе А больше значущих битов, что равны единице, чем битов, что равны нулю. Помогите...

Работа с битами. - C++
помогите!! как писать эту на программе с++ Ввести последовательность из 8 символов. Сравнить 5-й и 6-й биты каждого символа. Если они...

28
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
04.06.2011, 21:01 #16
Вы меня запутали
Мне нужно проверить соответствует ли первый бит единице, второй единице, третий единице и 4-ый нулю.
Тот пример, что вы привели, проверяет только первые 3 единицы. А мне нужно чтобы и ноль проверяло.
1110xxxx

а всё, что хххх - там не важно нули или единицы
0
iama
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
04.06.2011, 21:03 #17
grizlik78, блин, точно, спасибо, двоичная запись - зло
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
04.06.2011, 21:03 #18
да он прав, маска должна быть 11110000

C
1
2
3
4
mask=11110000b;
val = 11110010b;
if ((val&mask)==mask) проходит.
else нет.
0
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
04.06.2011, 21:07 #19
Нет, опять не работает...

Добавлено через 1 минуту
Под данную маску попадают только числа от -17 до -32 включительно
а в вашем последнем примере от -1 до -16
0
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,019
04.06.2011, 21:10 #20
C
1
2
3
4
5
mask = 11110000b;
expect = 11100000b;
val = 11110010b;
if ((val&mask)==expect) проходит.
else нет.
2
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
04.06.2011, 21:31 #21
а если проверять на соответствие маске вот так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
int main()
{
    // 1110 xxxx
    // 128 64 32 16 8 4 2 1
    int a = 128 + 64 + 32 + 4;
    int mask = 0xE; // 1110
 
    if (a>>4 == mask) std::cout << "1";
    else std::cout << "0";
 
    return 0;
}
0
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
04.06.2011, 22:25 #22
Способ grizlik78 вроде как должен работать быстрее?
0
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
05.06.2011, 08:51 #23
думаете битовый сдвиг намного медленнее побитового "И"?
0
mexmet20
1 / 1 / 0
Регистрация: 15.05.2011
Сообщений: 16
05.06.2011, 18:32  [ТС] #24
Цитата Сообщение от mexmet20 Посмотреть сообщение
извините но я ничего не понял по боолще не могли бы писат.
брат вместе точек че надо писат_*?()_

Добавлено через 2 минуты
Цитата Сообщение от denix Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define MASK 0x60
#define BIT_5 0x20
#define BIT_6 0x40
 
....
 
      if (((mas[i] & BIT_5) && ((mas[i] & BIT_6))
        bit = mass[i] & 0x01;
      else
        bit = mass[i] & 0x80;
 
      if (bit)
          mas[i] |= MASK;
      else
          mas[i] &= ~MASK;
 
...
Добавлено через 13 минут
брат вместе точек че надо писать подробно сможещь писать?
0
denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
05.06.2011, 22:52 #25
Цитата Сообщение от no0ker Посмотреть сообщение
думаете битовый сдвиг намного медленнее побитового "И"?
одинаково
0
iama
1250 / 975 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
05.06.2011, 23:32 #26
Цитата Сообщение от denix Посмотреть сообщение
одинаково
ну это не сказать, скорее зависит от процессора, наверно
0
denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
06.06.2011, 08:14 #27
Цитата Сообщение от iama Посмотреть сообщение
ну это не сказать, скорее зависит от процессора, наверно
без ну
0
mexmet20
1 / 1 / 0
Регистрация: 15.05.2011
Сообщений: 16
06.06.2011, 12:36  [ТС] #28
++++++++++++++++
0
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,019
06.06.2011, 21:58 #29
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
#include <stdio.h>
 
char table[6] = { 4, 5, 5, 4, 0, 0 };
 
char transform_char(char c)
{
    table[4] = 0x80 & c;
    table[5] = 0x01 & c;
    if (table[table[(c & 0x60) >> 5]])
        return c | 0x60;
    return c & (~0x60);
}
 
void transform_all(char array[8])
{
    int i;
    for (i = 0; i < 8; ++i)
        array[i] = transform_char(array[i]);
}
 
void print_array(char array[8])
{
    int i;
    for (i = 0; i < 8; ++i)
    {
        char c = array[i];
        printf("%c - %04o\n", c, c);
    }
}
 
int main()
{
    char array[8];
    printf("Input 8 characters: ");
    scanf("%8c", array);
    printf("before:\n");
    print_array(array);
    transform_all(array);
    printf("after:\n");
    print_array(array);
    return 0;
}
Биты нумеруются с нуля. Если надо с единицы, то надо будет константы поменять.
Скучный код писать не хочу
1
06.06.2011, 21:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2011, 21:58
Привет! Вот еще темы с ответами:

Работа с битами - C++
В общем вот локальная проблема: есть int, который выступает в роли сетки нулей и единиц, два примера, разницу между которыми не могу...

Работа с битами - C++
Стоит задача: вывести все двоичные коды чисел от 0 и до 2n-1. Сделать напролом могу(переводить в цикле каждое число в двоичную с-му и...

Работа с битами в Char - C++
Доброго времни суток! Стоит задача сделать операцию сложения битов по модулю 2 над двумя объектами типа char, приравнять полученный...

Работа с битами числа - C++
Извлечь 5 битов числа A, начиная со второго и вставить их в число B, начиная с третьего бита. Нашел код...


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

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

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