Какая операция наиболее эффективна для разбиения целого числа на два символа в Arduino? - PullRequest
0 голосов
/ 10 января 2012

Какой из следующих двух подходов более эффективен на ATmega328P ?

unsigned int value;
unsigned char char_high, char_low;

char_high = value>>8;
value = value<<8;
char_low = value>>8;

OR

unsigned int value;
unsigned char char_high, char_low;

char_high = value>>8;
char_low = value & 0xff;

Ответы [ 2 ]

3 голосов
/ 10 января 2012

Вы действительно должны измерить.Я не буду отвечать на ваш вопрос (так как вы выиграете больше от измерения, чем я), но я дам вам третий вариант:

struct {
    union {
        uint16_t big;
        uint8_t small[2];
    };
} nums;

(помните о разнице между старшим порядком инемного порядковый номер здесь)

0 голосов
/ 10 января 2012

Одним из вариантов будет измерение (как уже было сказано).

Или скомпилируйте оба и посмотрите, как выглядит вывод на ассемблере.

но на самом деле второй код, который у вас есть, не будет работать - если вы возьмете value << 8 и назначите его для char, все, что вы получите, это ноль в char. Последующее >>8 все равно оставит вас с нулем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...