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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.76
junior c
0 / 0 / 0
Регистрация: 14.10.2012
Сообщений: 13
#1

битовая маска - C++

28.04.2013, 13:50. Просмотров 2976. Ответов 9
Метки нет (Все метки)

надо разработать функцию проверки правильности битовой маски.

32-х битная “маска” считается действительной, если ее двоичное представление содержит непрерывный ряд “1″ и следующий за ним ряд “0″.
Пример правильных битовых масок:
11110000000000000000000000000000
11111000000000000000000000000000
11111111111100000000000000000000

Пример неправильных битовых масок:
10110000000000000000000000001000
01111100000000000000001000000001

вот мой код,.. но здесь что-то не так
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
#include <iostream>
#include <stdlib.h>
#define N 32
using namespace std;
void test (long* mas){
     for (int i=0; i<N; i++){
         if (mas[i]<0 || mas[i]>1){
            cout <<"error"<<endl;
               break;
         }
         if(mas[i]<=mas[i+1]){
             cout<<"неправильно"<<endl;
             break;
            
         }
         else{
            cout<<"Правильно"<<endl;
            break;
         }
         
     }    
}
int main(){
    long mas[N];
    for(int i=0; i<N; i++)
         cin>>mas[i];
     
     test(mas);
 
system("PAUSE");   
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2013, 13:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос битовая маска (C++):

Битовая маска - C++
Как в шифровании битовыми перестановками применить маску?

битовая маска - C++
как использовать битовую маску? за пример можно взять выделение k-того разряда из n-разрядного числа (в пофиг какой системе исчесления).

Как обратиться к объекту bitset так, чтобы результатом была битовая маска - C++
Здравствуйте, для образовательных целей решил научится работать с bitset, как я понял класс эмулирует массив с размером элемента 1 бит....

"Битовая Маска" - C++
Всем доброго времени суток, очень долго мучаюсь на битовыми операциями, а именно над так называемой маской. Гугл не выдал мне никаких...

Битовая инверсия - C++
Доброго времени суток! Я что-то запутался с побитовой инверсией. В коде прописываю int a=5; cout&lt;&lt;~a&lt;&lt;endl; Это же...

Битовая сортировка! - C++
Всем привет. Нужно написать реферат по теме &quot;Битовая сортировка&quot;. Такого в инете, а также Википедиях и прочих джерелах даже примерно не...

9
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
28.04.2013, 14:09 #2
В массиве у Вас 32 элемента,каждый из которых должно иметь значение 1 или 0, правильно? То есть, Ваш массив-это и есть битовая маска?
C++
1
2
3
4
5
if(mas[i]<=mas[i+1]){
             cout<<"неправильно"<<endl;
             break;
            
         }
Если первый элемент равен 1, а второй тоже 1, то это неправильно?
0
junior c
0 / 0 / 0
Регистрация: 14.10.2012
Сообщений: 13
28.04.2013, 14:12  [ТС] #3
Цитата Сообщение от metaluga145 Посмотреть сообщение
В массиве у Вас 32 элемента,каждый из которых должно иметь значение 1 или 0, правильно? То есть, Ваш массив-это и есть битовая маска?
C++
1
2
3
4
5
if(mas[i]<=mas[i+1]){
             cout<<"неправильно"<<endl;
             break;
            
         }
Если первый элемент равен 1, а второй тоже 1, то это неправильно?
да, массив и есть битовой маской.
Неправильно будет когда после 0 будет 1
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
28.04.2013, 14:15 #4
Кроме всего прочего, при таком цикле if, Вы вылезете за пределы массива(на последней итерации i=N-1, а что такое элемент N не ясно).

Добавлено через 1 минуту
Цитата Сообщение от junior c Посмотреть сообщение
Неправильно будет когда после 0 будет 1
тогда не
C++
1
mas[i]<=mas[i+1]
а
C++
1
mas[i]<mas[i+1]
Добавлено через 1 минуту
Да и не кажется ли Вам, что использовать long в данном случае не экономно с точки зрения памяти?
0
junior c
0 / 0 / 0
Регистрация: 14.10.2012
Сообщений: 13
28.04.2013, 14:22  [ТС] #5
Цитата Сообщение от metaluga145 Посмотреть сообщение
Кроме всего прочего, при таком цикле if, Вы вылезете за пределы массива(на последней итерации i=N-1, а что такое элемент N не ясно).

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

тогда не
C++
1
mas[i]<=mas[i+1]
а
C++
1
mas[i]<mas[i+1]
Добавлено через 1 минуту
Да и не кажется ли Вам, что использовать long в данном случае не экономно с точки зрения памяти?
по условию должен быть long,.. а с циклом не понял,.. там должно быть другое условие???
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
28.04.2013, 14:32 #6
C++
1
2
3
4
if (i !=N-1)
    if(mas[i]<=mas[i+1]){
        cout<<"неправильно"<<endl;
        break;
1
Isantel
13 / 13 / 1
Регистрация: 23.11.2010
Сообщений: 254
28.04.2013, 14:33 #7
Цитата Сообщение от junior c Посмотреть сообщение
по условию должен быть long,.. а с циклом не понял,.. там должно быть другое условие???
не "меньше или равно", а просто "меньше"
0
UnsKneD
алкокодер
154 / 150 / 11
Регистрация: 27.12.2012
Сообщений: 548
28.04.2013, 15:42 #8
Можно было проще написать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    const int n = 32;
    bool mask[n] = {1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    bool flag;
    for(int i = 0; i<n; i++){
        if( mask[i] == 0 && mask[i+1] == 1 ){
            flag = false;
            break;
        }
        flag = true;
    }
 
    if( flag ){ 
        printf("true\n");
    } else { printf("false\n"); };
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
28.04.2013, 15:47 #9
UnsKneD,
Цитата Сообщение от UnsKneD Посмотреть сообщение
for(int i = 0; i<n; i++){
* * * * if( mask[i] == 0 && mask[i+1] == 1 ){
* * * * * * flag = false;
* * * * * * break;
* * * * }
* * * * flag = true;
* * }
И чему же равен mask[n]? 1 или 0? или 135456?(я про последнюю итерацию цикла)
0
UnsKneD
алкокодер
154 / 150 / 11
Регистрация: 27.12.2012
Сообщений: 548
28.04.2013, 15:55 #10
metaluga145, нда, не учел такого варианта что там в мусоре может оказаться.
тогда условие цикла будет выглядеть так
C++
1
for(int i = 0; i<n-1; i++)
0
28.04.2013, 15:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2013, 15:55
Привет! Вот еще темы с ответами:

64-битовая строка - C++
Необходимо реализовать структуру 64-битовой строки состоящей из двух unsigned long полей, с последующей возможностью использования битовых...

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

Битовая операция -> - C++
Что делает операция -&gt; К примеру, есть структура: struct BIT{ unsigned int cod1:3; :1;...

Битовая арифметика - C++
Почему при: int myVar = 15, mask = 0x00 00 00 01; //выделил разряды printf(&quot;%d&quot;, myVar &amp; mask); Я получаю -1? Конечно, я мог бы...


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

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

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