为了提取无符号32位整数的高16位和低16位,并将它们分别存储在不同的uint16_t变量中,我按照以下方式操作(nbr是一个无符号32位整数):
uint16_t lower_word = (uint16_t) nbr & 0x0000FFFF; // mask desired word
uint16_t upper_word = (uint16_t) ((nbr & 0xFFFF0000) >> 16); // right-shift after masking
将变量显式转换为uint16_t是否是不必要的?如果有其他更有效的方法来获得所需的结果,您会推荐什么方法而不是这种方法吗?
int
或long
是64位,则将UL
替换为U
。说真的,你难道没有更好的事情可做吗?每次我发帖子时都跟踪我并提出远远超出任何新手需要了解的语言法律评论?这个答案已经过于详细,无法作为教学内容,也没有涵盖到模糊的车库编译器的可移植性问题。 - Lundin