以下哪两种方法在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;
答案 0 :(得分:3)
你真的应该衡量。我不会回答你的问题(因为你会从测量中获益更多),但我会给你第三个选择:
struct {
union {
uint16_t big;
uint8_t small[2];
};
} nums;
(请注意大端和小端之间的区别)
答案 1 :(得分:0)
一种选择是衡量它(正如已经说过的那样)。
或者,编译两者并查看汇编语言输出的样子。
但实际上,您拥有的第二个代码将无效 - 如果您将value << 8
转移到char
,则char
中的所有内容均为零。随后的>>8
仍将为您留下零。