Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Работа с битами в С++ / 11 сообщений из 11, страница 1 из 1
16.10.2006, 19:06
    #34058382
Yosip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с битами в С++
Подскажите с какой стороны начать.Надо сделать кодирующую программу которая должна делать следующее : 1 байт превратить в три байта путем трех разового повторения каждого бита.Ниже пример:
DE == D -- E == F(11)-- C(12) -- 7(9) -- F(10) -- F(7) -- 8(8)
-------1101 - 1110 - 1111 -1100 - 0111 - 1111 - 1111 - 1000
И так несколько байт.Потом из каждых четырех бит (полубайта)собрать новые байты ( в скобках указаны номера на которые их надо ставить )
Ниже пример как надо собирать - верхний ряд значение в шестнадцатиречном виде, нижний ряд это тот номер что в скобках вверху , то есть откуда его видергивать.
C 0 0 1 E 0 F 8 7 F F C 0 0 0 0 0
(1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13)(14) (15)(16) (17)
Поскажите как это сделать в С++.
Спасибо всем за советы.
...
Рейтинг: 0 / 0
17.10.2006, 10:03
    #34059086
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с битами в С++
YosipПодскажите с какой стороны начать.Надо сделать кодирующую программу которая должна делать следующее : 1 байт превратить в три байта путем трех разового повторения каждого бита.Ниже пример:
DE == D -- E == F(11)-- C(12) -- 7(9) -- F(10) -- F(7) -- 8(8)
-------1101 - 1110 - 1111 -1100 - 0111 - 1111 - 1111 - 1000
И так несколько байт.Потом из каждых четырех бит (полубайта)собрать новые байты ( в скобках указаны номера на которые их надо ставить )
Ниже пример как надо собирать - верхний ряд значение в шестнадцатиречном виде, нижний ряд это тот номер что в скобках вверху , то есть откуда его видергивать.
C 0 0 1 E 0 F 8 7 F F C 0 0 0 0 0
(1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13)(14) (15)(16) (17)
Поскажите как это сделать в С++.
Спасибо всем за советы.

Что требуется во второй части - не понял.

Разбей на 2 этапа. В первом цикл(ы) с индексами текущих бит.
...
Рейтинг: 0 / 0
17.10.2006, 10:26
    #34059149
Yosip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с битами в С++
Первая задача - перекодировать один байт в три путем утроения каждого бита в исходном байте.
Например исходный байт DE.Его двоичное представление - 1101 1110 . Первая "1" пишется три раза "111", вторая тоже три раза "111", третим идет "0" - пишется три раза "000" и т.д.Получается в результате 8*3=24 бита , которые раскладываются в три байта
1101 1110 --> 1111 1100 - 0111 1111 - 1111 1000

Вторая задача - получить доступ отдельно к старшему и младшему полубайту чтоб собрать из них новые байты. То есть перые 1111 надо выдернуть и поставить скажем на место младшей тетрады в пятом байте.
...
Рейтинг: 0 / 0
17.10.2006, 10:38
    #34059207
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с битами в С++
YosipПервая задача - перекодировать один байт в три путем утроения каждого бита в исходном байте.
Например исходный байт DE.Его двоичное представление - 1101 1110 . Первая "1" пишется три раза "111", вторая тоже три раза "111", третим идет "0" - пишется три раза "000" и т.д.Получается в результате 8*3=24 бита , которые раскладываются в три байта
1101 1110 --> 1111 1100 - 0111 1111 - 1111 1000

Вторая задача - получить доступ отдельно к старшему и младшему полубайту чтоб собрать из них новые байты. То есть перые 1111 надо выдернуть и поставить скажем на место младшей тетрады в пятом байте.

Значит - пробежаться по тетрадам и в соответствии с таблицей (правила, из постановки задачи), разместить их там где надо.
...
Рейтинг: 0 / 0
17.10.2006, 15:26
    #34060470
H.A.M.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с битами в С++
а вот такая чтука не подойдет?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class BitWork
	{
		public int Set(int var, int No)
		{
			return Color | ( 1 <<(No- 1 ));
		}
		public int Reset(int var, int No)
		{
            return Color & ~( 1 <<(No- 1 ));
		}
		public int Get(int var, int No)
		{
			return (Color & ( 1 <<(No- 1 ))) !=  0 ;
		}
	}
...
Рейтинг: 0 / 0
17.10.2006, 15:38
    #34060523
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с битами в С++
H.A.M.

bitset
bit fields

Неужели этого мало? :)
...
Рейтинг: 0 / 0
17.10.2006, 15:59
    #34060607
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с битами в С++
H.A.M.а вот такая чтука не подойдет?
...


Ну, это тока операции выделения битов.
...
Рейтинг: 0 / 0
17.10.2006, 17:02
    #34060955
H.A.M.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с битами в С++
Dmitrii K. H.A.M.

bitset
bit fields

Неужели этого мало? :)
А в чем тогда проблема?
Размножить биты по три?
...
Рейтинг: 0 / 0
17.10.2006, 17:11
    #34061020
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с битами в С++
H.A.M. Dmitrii K. H.A.M.

bitset
bit fields

Неужели этого мало? :)
А в чем тогда проблема?
Размножить биты по три?
Это кому вопрос?
У меня с битами проблем нет. )
...
Рейтинг: 0 / 0
17.10.2006, 18:51
    #34061519
Yosip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с битами в С++
Я пока начинающий прогамист.И в С++ работать с отдельными битами и тетрадами работать не приходилось.
За ответы большое спасибо.Завтра обработаю все ответы.
...
Рейтинг: 0 / 0
19.10.2006, 11:03
    #34065782
Yosip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с битами в С++
Разобрался . Всем спасибо !
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Работа с битами в С++ / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]