|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.08.2009, 16:57 | #1 |
Пользователь
Регистрация: 09.07.2009
Сообщений: 16
|
Вопрос по LOWORD и HIWORD
code:
int main() { unsigned _int32 i = LOWORD(LOBYTE(0x1FF));// i = 255 unsigned _int32 j = LOWORD(HIBYTE(0x1FF));//j = 1 unsigned _int32 i_1 = LOWORD(0x1FFFF);//i_1 = 65535 unsigned _int32 j_1 = HIWORD(0x1FFFF);//j_1 = 1 unsigned _int32 i_2 = HIWORD(LOBYTE(0x1FFFF));// почему i_2= 0? // когда по логике должно = 1 unsigned _int32 j_2 = HIWORD(HIBYTE(0x1FFFFFF));// а здесь ? // почему j_2 = 0 хотя по логике должно = 1 return 0; } Заранее сенька. |
05.08.2009, 19:52 | #2 | |
Форумчанин
Регистрация: 31.05.2009
Сообщений: 786
|
потому что компилятор раскрывает скобки изнутри наружу
LOBYTE(0x1FFFF)=0x000000ff HIWORD(0x000000ff)=0 аналогично и j_2 сделай лучше так: Цитата:
|
|
05.08.2009, 23:22 | #3 |
Пользователь
Регистрация: 09.07.2009
Сообщений: 16
|
дополнение
alexcoderу сенька за ответ.
я постигаю АЗЫ API; Не хочу новой темы открывать: обясните кто захочет я не одуплю след. код: int main() { unsigned short x = 1; printf("%s\n", *((unsigned char *) &x) == 0 ? "big-endian" : "little- endian"); return 0; } как это понять: *((unsigned char *) &x) смысл кода узнать тип расположения байтов. |
06.08.2009, 00:06 | #4 |
Форумчанин
Регистрация: 31.05.2009
Сообщений: 786
|
сначала прочитай http://ru.wikipedia.org/wiki/Порядок_байтов
Так вот в интеловской архитектуре переменная будет располагаться в памати в следующем виде: 0x01, 0x00(little-endian), а SPARKе: 0x00, 0x01(big-endian) Так вот (unsigned char *) &x - это приведение переменной x к типу массива элементов unsigned char. Этот массив будет содержать последовательность либо 0x01, 0x00 либо 0x00, 0x01. а первая * - это обращение к первому элементу массива через указатель. Если не нравятся указатели, можно обратиться через индекс массива: printf("%s\n", ((unsigned char *) &x)[0] == 0 ? "big-endian" : "little- endian"); |
06.08.2009, 00:25 | #5 |
Пользователь
Регистрация: 09.07.2009
Сообщений: 16
|
re
исчерпывающий ответ СЕНЬКА alexcoderу
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) | Albert2008 | Общие вопросы Delphi | 4 | 21.08.2008 15:33 |
вопрос по сокетам и общение как в ICQ.Сложный вопрос... | Руслантус | Общие вопросы C/C++ | 2 | 12.08.2008 21:10 |
Вопрос по VS C++ | Arthur | Общие вопросы C/C++ | 2 | 19.01.2008 18:34 |
Borland C++ не хочет видеть тип String? | SERGOO | Общие вопросы C/C++ | 3 | 10.06.2007 12:37 |