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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Считать с клавиатуры объект типа CString http://www.cyberforum.ru/cpp-beginners/thread12815.html
есть ли возможность это сделать? я разрабатываю консольное приложение.
C++ Как скомпелить exe на VC++ (2005) Здравствуйте! Я только начинаю изучать Visual C++. Написала программу и теперь не знаю как ее скомпилить так, чтобы она шла на любом компьютере. Т.к. то, что я скомпелила не запускается. Компелю так: Build->Build <Название программы>. Помогите пжл. За ранее спасибо http://www.cyberforum.ru/cpp-beginners/thread12810.html
Найти первый четный элемент одномерного массива C++
как найти первый четный элемент одномерного массива целых чисели (10 элем.)?
Нужен пример типового модуля распознавания команд для консольного приложения C++
я собираюсь это делать, но чувствую, что сейчас буду изобретать велосипед. я собираюсь делать это так - у меня ожидание на ввод строки непрерывное, считанная строка каки мнибудь очень очень очень хитрым методом распознаёться на имя команды и параметры. в цикле ожидания у меня рядком стоят ифы сравнения команд. если обработчик попадает в иф то он выполняет его) :wall: а как это делают...
C++ Функции для записи данных в отдельный файл txt http://www.cyberforum.ru/cpp-beginners/thread12798.html
Прошу помочь с такой проблемой:какие функции используются для записи данных,в моём случае массива данных ,в отдельный файл txt Всем заранее очень благодарен!!!:bravo:
C++ Создание кода программы с нуля!! создание кода C++ ВОТ УСЛОВИЕ : Для данного вещественного x,a,b,c найти значение следующей функции f,принимающей вещественное задания: http://pic.ipicture.ru/uploads/080922/maNcuT62PT.jpg подробнее

Показать сообщение отдельно
supdecar
3 / 3 / 2
Регистрация: 25.04.2014
Сообщений: 87
11.03.2015, 13:16     битовая маска
Помогите разобраться с битовой маской, есть вектор F[10] равный в dec 137 hex 89 bin 10001001 Применяю сдвиг и маску
cout <<bitset<8>((F[10]>> 4)& 00000111);
Получаю: 00001000
Я не понимаю как так выходит, если я сдвинул на четыре вправо остается 00001000 применяем маску 00000111 должно было выйти 00000000 Что я не верно делаю??? скидываю свой код если нужен.
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <cstdlib>
#include <iostream>
#include <vector>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <string>
#include <bitset>
 
 
using namespace std;
 
int main()
{
//// Чтение из файла ///////////////////////////////////////////////////////////////////////////////
    vector<unsigned> F;
    unsigned FS;
    string s;
    int num;
    int colpar;
    int b;
    int q;
    size_t n;
    istringstream ss;
    ifstream ifs("D:\\1.txt"); 
 
    while (!ifs.eof())
    {
        getline(ifs, s);
        if ((n = s.find("68")) != string::npos)
        {
            if (s.length() - n >= 5)
            {
                if (!isxdigit(s[n + 2]) && s.substr(n + 3, 2) == "11")
                {
                    F.push_back(0x68);
                    F.push_back(0x11);
                    ss.str(s.substr(n + 5));
                    ss.clear();
                    while (!ss.eof())
                    {
                        ss >>hex>> FS;
                        ss.get();
                        F.push_back(FS);
                    }
                }
            }
        }
//// Вывод ///////////////////////////////////////////////////////////////////////////////////////////
        if (F.size() > 0)
        {
            for (int i = 0; i < F.size(); ++i)
            {
                num=i;
                cout <<setw(2)<<setfill('0') <<hex<<F[i] << " ";
                if ((i + 1) % 16 == 0) cout << endl;
            }
            cout <<"\n"<<endl;
            cout <<setfill(' ')<<"hex"<<fixed<<setw(10)<<"dec"<<fixed<<setw(20)<<"Comments";
            string a[num];
            
            if (F[0]=68){
            a[0] = "Start Byte";
            } else {a[0] = "Bad Packet";}
            
            if (F[1]=11){
            a[1] = "Tel Type";
            } else {a[1] = "Bad Packet";}
            
            a[2] = "SegNum";
            a[3] = "SegNum";
            a[4] = "Reserved";
            a[5] = "Reserved";
            a[6] = "Length";
            a[7] = "Length";
            a[8] = "Length";
            a[9] = "Length";
        
            if ((((F[10] >> 3) & 00000111) == 1)&&(((F[10] >> 4) & 00000111) == 0)&&(((F[10] >> 5) & 00000111) == 0)){
            a[10] = "1 pair Address";
            q = 2;}else if ((((F[10] >> 3) & 00000111) == 0)&&(((F[10] >> 4) & 00000111) == 1)&&(((F[10] >> 5) & 00000111) == 0)){
            a[10] = "2 pair Address";
            q = 4;}else if ((((F[10] >> 3) & 00000111) == 1)&&(((F[10] >> 4) & 00000111) == 1)&&(((F[10] >> 5) & 00000111) == 0)){
            a[10] = "3 pair Address";
            q = 6;}else if ((((F[10] >> 3) & 00000111) == 0)&&(((F[10] >> 4) & 00000111) == 0)&&(((F[10] >> 5) & 00000111) == 1)){
            a[10] = "4 pair Address";
            q = 8;}else if ((((F[10] >> 3) & 00000111) == 1)&&(((F[10] >> 4) & 00000111) == 0)&&(((F[10] >> 5) & 00000111) == 1)){
            a[10] = "5 pair Address";
            q = 10;}else if ((((F[10] >> 3) & 00000111) == 0)&&(((F[10] >> 4) & 00000111) == 1)&&(((F[10] >> 5) & 00000111) == 1)){
            a[10] = "6 pair Address";
            q = 12;}else if ((((F[10] >> 3) & 00000111) == 1)&&(((F[10] >> 4) & 00000111) == 1)&&(((F[10] >> 5) & 00000111) == 1)){
            a[10] = "7 pair Address";
            q = 14;}else {a[10] = "Bad Value";}
            
            for (int i=0;i<11;i++){
            cout<<"\n"<<hex<<F[i]<<dec<<setw(11)<<F[i]<<fixed<<setw(22)<<bitset<8>(F[i])<<fixed<<setw(35)<<a[i];
            }
cout <<bitset<8>((F[10]>> 4)& 00000111);
 
            F.clear();
            cout << endl << endl;
        }
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
Добавлено через 1 час 0 минут
Исправил косяк был в использовании двоичного кода надо было вместо 00000111 писать 7
 
Текущее время: 06:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru