Питання щодо СІ

Ви переглядаєте архів форуму.

Автор: tester () Дата: 06/12/2005 10:19

ламерське питання є деяка змінна розміру int

b = (low a) c = (high a) це не працює

як правильно виділити з нього молодший і старший байт (Low і High) для присвоєння їх двом змінним char (можна через покажчик, а як простіше - з мінімумом операцій)

Відправлення відредагованого (06/12/2005 10:21)

Автор: stiker () Дата: 06/12/2005 10:21

Без використання покажчиків:

#define hibyte(a) ((a>>8) & 0xFF) #define lobyte(a) ((a) & 0xFF)

Автор: tester () Дата: 06/12/2005 10:22

Автор: alho () Дата: 06/12/2005 10:31

______________________________________________________ Ніколи не сперечайтеся з дурнем - люди можуть не помітити різницю між вами

Автор: Bill () Дата: 06/12/2005 11:06

Тільки для дуже тупого компілятора використання union дасть виграш. Зазвичай, обидві конструкції транслюються в однаковий код.

Автор: alho () Дата: 06/12/2005 12:36

Union tst int a; char i[2]; > tst1;

використовує 2 байти RAM

вибачте 4 байти RAM.

До чого тут тупизна компілятора.

______________________________________________________ Ніколи не сперечайтеся з дурнем - люди можуть не помітити різницю між вами

Автор: Bill () Дата: 06/12/2005 13:09

наскільки я зрозумів. Питання було як виділити з 16-розрядного числа старший та молодший байти. Використання union лише один з варіантів. Інший варіант був наведений вище, але за програмним кодом вони обидва еквівалентні між собою. Тільки "тупий" компілятор буде явно виконувати зсув і логічне "І". Економія ОЗП приВикористання union сумнівів не викликає, тому і особливих пояснень не вимагає.

Автор: alho () Дата: 06/12/2005 13:23

мав на увазі саме економію RAM.

______________________________________________________ Ніколи не сперечайтеся з дурнем - люди можуть не помітити різницю між вами

Автор: rik () Дата: 08/12/2006 01:53

Підкажіть, як зробити навпаки , тобто. є дві змінних розміру char і змінна розміру int. Як записати дві змінні char в одну змінну розміру int.

char h,l; // h - high byte, l - low byte int a;

a = (h Підкажіть, а як зробити навпаки, тобто є дві > змінних розміру char і > змінна розміру int. Як записати дві змінні char в > одну змінну розміру int. пробував так char h, l // h - high byte, l - low byte int a; h Начебто працює, але чи можна так робити?(формати то у чисел > різні, чи не буде > перетворення формату з char в int) > > робити?

так і робіть a = h*256 +l; або a = h

такі прості конструкції для інтів хайтек розуміє добре. А ось для лонгів може почати чесно перемножувати або зрушувати. можна використовувати т.зв. юніони чи покажчики

наприклад із покажчиками