哪个是在Arduino中将整数拆分为两个字符的最有效操作?

时间:2012-01-10 07:53:54

标签: arduino

以下哪两种方法在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 个答案:

答案 0 :(得分:3)

你真的应该衡量。我不会回答你的问题(因为你会从测量中获益更多),但我会给你第三个选择:

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

(请注意大端和小端之间的区别)

答案 1 :(得分:0)

一种选择是衡量它(正如已经说过的那样)。

或者,编译两者并查看汇编语言输出的样子。

但实际上,您拥有的第二个代码将无效 - 如果您将value << 8转移到char,则char中的所有内容均为零。随后的>>8仍将为您留下零。