реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Народ обясните человеку vbits.h Волкова с нормальным коментарием, слабо понимаю переопределения а идея понравилась
sKWO
сообщение Apr 19 2007, 20:11
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Хочу разобраться.
Применить знаю где а вот идею пой маймать немогу.
Файл прикрепляю......


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Apr 19 2007, 21:28
Сообщение #2


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Разберитесь с побитовыми операциями и все станет ясно. А так же с макросами с параметром. Это любая книга по С. И это будет лучше и эффективнее, чем кому то стучать пальцами по клаве в попытках объяснения.
Go to the top of the page
 
+Quote Post
sKWO
сообщение Apr 19 2007, 22:11
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(jorikdima @ Apr 19 2007, 21:28) *
Разберитесь с побитовыми операциями и все станет ясно. А так же с макросами с параметром. Это любая книга по С. И это будет лучше и эффективнее, чем кому то стучать пальцами по клаве в попытках объяснения.

Помог Сергей Борщ
как создать удобные макросоы, для обеспечения доступа к отдельным словам и байтам переменных.
Эта тема обчсуждается раза по 2 в месяц, поэтому всем уже просто лень писать в десятый раз одно и то же.
Основных подходов три - через указатель, через юнион и сдвигами.
#define LOW(int) (unsigned char)(*((char*)&(int)+0)) //returns lowbyte
#define HIGH(int) (unsigned char)(*((char*)&(int)+1)) //returns highbyte
typedef unsigned char U8;

union tagDummyUnion
{
int i;
U8 b0;
U8 b1;
} DummyUnion;

DummyUnion MyVar;

MyVar.b0 = 80;
MyVar.b1 = 195;
printf("int value = %d\n", MyVar.i);uint16_t i = 0x1234;
uint8_t b0 = (i >> 0) & 0xFF;// low byte
uint8_t b1 = (i >> 8) & 0xFF; // high byte
i = ((uint16_t)b1 << 8) | b0;аналогично для более длинных типов.


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 19 2007, 23:57
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(sKWO @ Apr 19 2007, 21:11) *
Основных подходов три - через указатель, через юнион и сдвигами.

То что вы видите в примере Volkov'a это есть четвертый способ - с помощью заранее подготовленных масок:

Код
00000001  11111110
00000010  11111101
00000100  11111011
00001000  11110111
00010000  11101111
00100000  11011111
01000000  10111111
10000000  01111111
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 20 2007, 00:15
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



...И даже получили ответы не на свои вопросы... (с)Жванецкий.
или "Попал под лошадь" (с) Ильф и Петров
Цитата(sKWO @ Apr 19 2007, 21:11) *
как создать удобные макросоы, для обеспечения доступа к отдельным словам и байтам переменных.
Так а при чем здесь макросы имени Волокова и доступ к байтам? Макросы Волкова предназначены для доступа к битам. Чтобы понять, как они работают, надо прочитать о препроцессоретут или тут и вспомнить двоичную арифметику (И, ИЛИ, НЕ, Искл. ИЛИ).


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 03:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01363 секунд с 7
ELECTRONIX ©2004-2016