Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> битовые операции 
V
    Опции темы
anatox91
Дата 2.11.2011, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: 1
Всего: 13



есть одно шестнадцатиразрядное число(два байта, к примеру short int) и восьмиразрядное(один байт, к примеру char)
как можно записать восьмиразрядное число в младшие(или старшие) восемь битов шестнадцатиразрядного, при этом не изменяя остальные восемь битов?

Добавлено через 13 минут и 27 секунд
+ еще вопрос: как получить из 16-разрядного числа старшие или младшие 8 битов, например чтобы записать в другое число(8-разрядное)?


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
math64
Дата 2.11.2011, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Код

unsigned short word;
unsigned char byte;
// Установка младших битов, не изменяя старших
word = (word & 0xFF00)  | (byte & 0xFF);
// Получить старшие биты
byte = (unsigned char)( (word >> 8) & 0xFF);


PM   Вверх
anatox91
Дата 2.11.2011, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: 1
Всего: 13



спасибо, а наоборот как будет? т.е. установить старшие, не изменяя младших и получить младшие?


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
anatox91
Дата 2.11.2011, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: 1
Всего: 13



я правильно понимаю?
Код

// Установка старших битов, не изменяя младших
word = (word & 0x00FF)  | (byte & 0xFF);
// Получить младшие биты
byte = (unsigned char)(word & 0xFF);

так оно будет?


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
bsa
Дата 2.11.2011, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(anatox91 @  2.11.2011,  19:36 Найти цитируемый пост)
так оно будет? 

нет, первая часть будет не так - ты забыл сдвинуть влево на 8 бит значение byte.
PM   Вверх
anatox91
Дата 2.11.2011, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: 1
Всего: 13



Код

// Установка старших битов, не изменяя младших
word = (word & 0xFF)  | ((byte << 8) & 0xFF);
// Получить младшие биты
byte = (unsigned char)(word & 0xFF);

 все верно? я просто сейчас не могу сам проверить


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
math64
Дата 2.11.2011, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



а сейчас маска для сдвинутого значения неправильная (или нужно сдвигать после маскирования)

Добавлено через 10 минут и 57 секунд
Если программирушь в Windows, в windows.h есть макросы
Код

#define MAKEWORD(a,b)    ((WORD)(((BYTE)(a))|(((WORD)((BYTE)(b)))<<8)))
#define MAKELONG(a,b)    ((LONG)(((WORD)(a))|(((DWORD)((WORD)(b)))<<16)))
#define LOWORD(l)    ((WORD)((DWORD)(l)))
#define HIWORD(l)    ((WORD)(((DWORD)(l)>>16)&0xFFFF))
#define LOBYTE(w)    ((BYTE)(w))
#define HIBYTE(w)    ((BYTE)(((WORD)(w)>>8)&0xFF))


PM   Вверх
anatox91
Дата 2.11.2011, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: 1
Всего: 13



можно просто код для двух оставшихся вариантов?


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
math64
Дата 3.11.2011, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Код

// Установка старших битов, не изменяя младших
word = (word & 0xFF)  | ((byte << 8) & 0xFF00);
// то же с помощью макросов из windows.h
word = MAKEWORD(LOBYTE(word), LOBYTE(byte) );


Это сообщение отредактировал(а) math64 - 3.11.2011, 17:49
PM   Вверх
bsa
Дата 3.11.2011, 10:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Вот до чего программисты дошли, уже и мозг включить лень, чтобы разобраться с битовым представлением числа и работой побитовых операций... Мы раньше умножение делали на ассемблере с использованием сдвигов...
PM   Вверх
anatox91
Дата 3.11.2011, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: 1
Всего: 13



math64, спасибо большое еще раз за помощь

bsa, мне не лень, просто у меня катастрофически не хватает времени, курсач большой по объему


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1139 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.