这是调用者任务在发送消息时分配的16位无符号值。对于每个新消息,值递增1,最终包裹并生成序列0,1,2,...... 65533,65534,65535,0等。所以我需要一个计数器来查找目标。我需要帮助才能获得最有效的包装方式。例如,如果当前值为65534并且我的目标计数为5,我需要一个函数来回绕并将目标设置为正确的值。
答案 0 :(得分:2)
如果您正在使用unsigned int
计数器,那么您可以简单地执行(x + 5) & 0xffffU
- 不需要检查溢出,因为无符号类型的算术被定义为在C中包围,而无符号类型必须使用纯二进制表示。
答案 1 :(得分:0)
如果您的计算机支持uint16_t
(在C99和C11编译器的<stdint.h>
中定义),请使用它。
uint16_t v = 65534;
v += 5;
assert(v == 3);
如果您的计算机不支持uint16_t
,则可以使用:
unsigned int v = 65534;
v = (v + 5) & 0xFFFF;
assert(v == 3);
答案 2 :(得分:-2)
如果它仅增加1,您只需执行以下操作:
#include <limits.h>
if (myint == (INT16_MAX - 1))
counter++;
myint++;
但是,始终检测溢出的“正确”方法如下:
#include <limits.h>
if ((INT16_MAX - myint) < numtoadd)
counter++;
myint += numtoadd;