Питання щодо СІ
Ви переглядаєте архів форуму.
Автор: 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
такі прості конструкції для інтів хайтек розуміє добре. А ось для лонгів може почати чесно перемножувати або зрушувати. можна використовувати т.зв. юніони чи покажчики
наприклад із покажчиками