Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для Кемаль
0 / 0 / 1
Регистрация: 02.11.2010
Сообщений: 38

Как обратиться к последним двум битам числа из блока

10.06.2012, 13:03. Показов 1549. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеются две функции, первая извлекает два последних бита из каждого байта, полученного из строки (Строка- Байты- Два последних бита) и, собственно, обратная.
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
 public static int[] StrToBit(string m)
        {            
            byte[] q = Encoding.Unicode.GetBytes(m);
 
            int[] b = new int[q.Length * 2];
 
            for (int i = 0; i < q.Length; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    b[i] = (q[i] >> j) & 1;
                    // f.ex 01001101 >> 2 == 00010011 & 00000001 == 00000001
                }
            }
 
            return b;
        }
        public static string BitToStr(int[] b)
        {
            byte[] q = new byte[b.Length];
            for (int i = 0; i < b.Length; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    q[i] |= Convert.ToByte(b[i] << j);
                }
            }
            string m = Encoding.Unicode.GetString(q);
            return m;
        }
Ещё имеется функция, которая после дкп преобразований записывала бы эти два последние бита в блок 8х8. Вот с ней у меня проблема, не могу понять, как обратиться к последним двум битам числа из блока.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  public static void Write(Block wr, int v1, int v2)
        {
            double w1 = wr.arr[4, 5], w2 = wr.arr[5, 4];       // позиции ДКП- коэффицентов, которые будут использоваться при встраивании/ извлечении сообщения
            double P = 25;                                     // порог, для сравнения результатов разности модулей коэффицентов
 
            byte[] tmp = new byte[2] { Convert.ToByte(v1), Convert.ToByte(v2) };
            if ((Math.Abs(v1) - Math.Abs(v2)) < -P)
            {
                // передача единичного бита
              
                
                // как обратиться к последним двум битам ??????__ у параметров w1 и w2 (val1 и val2 - биты )
            }
            else if ((Math.Abs(v1) - Math.Abs(v2)) > P)
            {
                // передача нулевого бита
            
            }
 
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.06.2012, 13:03
Ответы с готовыми решениями:

Дан код символа; как обратиться через битовый сдвиг к его 678 битам
дан код символа как обратиться через битовый сдвиг к его 678 битам, потом к 345 и потом к 12 попробовал так , не верно byte b3 =...

Равна ли сумма первых двух цифр пятизначного числа, двум последним?
Равна ли сумма первых двух цифр пятизначного числа, двум последним?

Проверка по битам числа
Надо сделать проверку числа к примеру 0F по битам, если в бите 0 то переход по следующему адрес. Про команду JZ знаю, а вот как проверять...

4
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
10.06.2012, 15:57
C#
1
2
3
byte firstBit = v1 & 1;
byte secondBit = v1 & 2;
byte lastTwoBits = v1 & 3;
0
 Аватар для Кемаль
0 / 0 / 1
Регистрация: 02.11.2010
Сообщений: 38
10.06.2012, 16:08  [ТС]
можно пояснение к тому, что тут происходит? и почему &, а не |
0
27 / 27 / 4
Регистрация: 29.01.2012
Сообщений: 160
10.06.2012, 18:03
& - побитовое умножение. т.е будут перемножены все биты 2-х чисел

Допустим нужно значение первого бита числа 10101101
10101101 умножаем побитово на 1 (т.е 00000001)
при умножение на 1 обнуляются все биты кроме 1

10101101
&
00000001
получаем 1 (как видно первый бит и равен 1). Т.е мы получили то что надо
0
 Аватар для Кемаль
0 / 0 / 1
Регистрация: 02.11.2010
Сообщений: 38
11.06.2012, 06:58  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
C#
1
2
3
byte firstBit = v1 & 1;
byte secondBit = v1 & 2;
byte lastTwoBits = v1 & 3;
Тут либо я Вас не правильно понимаю, либо меня неправильно поняли.
Я хочу обратиться к последним двум битам значений w1 и w2, а v1 и v2 - последние биты символов из строки, то есть например моё w1 выглядит вот так
1010101_0
я проверяю условие, и если оно выполняется, то должно получиться следующее
1010101_v1
либо _v2
в зависимости от условия.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2012, 06:58
Помогаю со студенческими работами здесь

Разбиение числа по битам
Всем привет! Есть int - число, его нужно разбить в четыре char - переменных. Как это сделать?

Найти слова по последним двум буквам
Всем привет, вот такая проблема ИТКН ИТГН ИТОН ИТШО СОСТКН ЛОЛШГ ЛОКН ИОСРКГ СЛТКН

Можно ли обратиться сразу к двум таблицам?
У меня есть таблица 'X' в бд из нее выводится информация только по определенному 'id'. Этот 'id' передается через глобальную переменную....

Отображение первого блока - последним
Доброй ночи, очень прошу помочь! Есть блок(main) который в коде идет самый первый(body--&gt;header--&gt;main) его нужно отображать для...

Обратиться к соседнему элементу блока
Добрый вечер. столкнулся с проблемой &lt;ul class=&quot;service_menu_ul&quot;&gt; &lt;li&gt; &lt;a href=&quot;#&quot;&gt;asdasd&lt;/a&gt; &lt;ul...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru