Цитата(CSB @ Jun 17 2006, 19:07)

Спасибо.
Но в сязи с этим возникает другой вопрос. Делаем тип переменной "а" unsigned long long. Как теперь сдвинуть на, например, 40 бит? Тут проблемы возникают даже при сдвиге на 7 бит.
Где проблемы возникают?
Код
unsigned long long a;
a = 1ULL << 40;
21 a = 1ULL << 40;
\ 00000002 E000 LDI R16, 0
\ 00000004 E051 LDI R21, 1
\ 00000006 .... LDI R30, LOW(a)
\ 00000008 .... LDI R31, (a) >> 8
\ 0000000A 8300 ST Z, R16
\ 0000000C 8301 STD Z+1, R16
\ 0000000E 8302 STD Z+2, R16
\ 00000010 8303 STD Z+3, R16
\ 00000012 8304 STD Z+4, R16
\ 00000014 8355 STD Z+5, R21
\ 00000016 8306 STD Z+6, R16
\ 00000018 8307 STD Z+7, R16
IAR AVR v4.10B
Цитата(CSB @ Jun 17 2006, 19:07)

Если провести присваивание вида
a = 1ULL;
то получим в "а" значение 0x0100000000000000;
Получается какя-то путаница в байтах числа.
При
a = 0xAFFULL;
а == 0xFF00000000000000
a = 0xABCDEFABCDEFABCD;
a == 0xCD00000000000000
Похоже вы не в ту сторону считаете, это у вас от кейла для x51 привычка к BigEndian. У AVR младший байт располагается по младшему адресу.