最优雅的方式来整理整数

时间:2013-11-28 03:30:34

标签: c integer

这是调用者任务在发送消息时分配的16位无符号值。对于每个新消息,值递增1,最终包裹并生成序列0,1,2,...... 65533,65534,65535,0等。所以我需要一个计数器来查找目标。我需要帮助才能获得最有效的包装方式。例如,如果当前值为65534并且我的目标计数为5,我需要一个函数来回绕并将目标设置为正确的值。

3 个答案:

答案 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;