Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2013, 14:44   #1
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию чтение битов

Здравствуйте уважаемые форумчанины.

Есть массив байтов byte[]
Как мне считать биты, от старшего разряда к младшему используя побитовые операции?
world12_tk вне форума Ответить с цитированием
Старый 21.04.2013, 14:49   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,648
По умолчанию

a and 1 - состояние младшего бита.
a shr 1 - сдвинуть все на один разряд вправо (второй бит становится младшим).
Arigato на форуме Ответить с цитированием
Старый 21.04.2013, 14:59   #3
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию

Arigato я немножко не понял.
Я сделал вот так
Код:
  for (byte b : byteArray ) { 
            for(int i = 7; i >=0; i--) {
                str +=(b & (1 << i))!=0 ? "1":"0";
            }
        }
Взял следующий пример. Есть у меня 2 числа 15 и 12. Я их перенес в byte[].
Начинаю читать биты и вот что у меня выходит:
00001111 00000000 11000000 00000000
А мне нужно что было так:
00000000 00001111 00000000 00000110
Или хотя бы так:
00001111 00000000 00000110 00000000
world12_tk вне форума Ответить с цитированием
Старый 21.04.2013, 15:34   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,342
По умолчанию

У меня правильно выводит (чуть измененный Ваш код):
Код:
#include <iostream>
#include <string>

using namespace std;

typedef unsigned char byte;

int
main()
{
    string str;
    byte byteArray[2] = {15, 12};
    for (auto b : byteArray) {
        for(int i = 7; i >= 0; i--) {
            str += (b >> i & 1) + '0';
        }
    }
    cout << str;
}
Цитата:
00001111 00001100
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 21.04.2013, 15:38   #5
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

world12_tk, в архитектуре Intel по младшему адресу пишется младший байт.
Т.е. в двухбайтовом числе сначала записывается младший байт, а потом старший.

Насчет числа 15, думаю, вопрос решен.
А что у Вас с числом 12 - не знаю, его нет ни в одном варианте. То, что Вы хотите видеть - число 6. А то, что у Вас получается - вообще 96.
s-andriano вне форума Ответить с цитированием
Старый 21.04.2013, 16:26   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,648
По умолчанию

Цитата:
Сообщение от world12_tk Посмотреть сообщение
Arigato я немножко не понял.
Потому как надо указывать язык, который вас интересует.
Сдвиг нужен вправо, а не влево, т.е. >>.
Arigato на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подсчет битов mercure243 Общие вопросы C/C++ 1 12.03.2012 03:56
Реверс битов SPBcore Помощь студентам 2 16.12.2010 19:34
Вставка битов Aleks2215 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 09.12.2010 20:32
Сдвиг битов XOKS Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 08.11.2010 18:11
Перестановка битов. RegentM Общие вопросы Delphi 3 05.11.2007 17:23