【发布时间】:2011-07-08 08:20:32
【问题描述】:
我正在编写一个 c 程序。我有一个无符号整数(16 位),它的值可以是任何时间,我有一个有符号字符(8 位),它的值可以是任何时间,在数据类型的明显限制范围内。我需要将有符号字符添加到无符号整数,结果是无符号整数,如果值溢出超过 0xFFFF 或低于 0x00,我需要结果等于限制(0x00 或 0xFFFF)。我想知道最快的方法是什么?我的方法如下所示,但它使用长数据类型,因此使用长二进制算法,所以我猜测有一种更快的方法......
long i;
unsigned int result;
i = someUINT + someCHAR;
if(i <= 0)
{
result = 0;
}
else if(i >= 0xFFFF)
{
result = 0xFFFF;
}
else
{
result = (unsigned int)i;
}
编辑:我使用的是 16 位 MCU(PIC24HJ 系列)和 Microchip C30 编译器。
【问题讨论】:
-
这应该在什么硬件上运行?这个问题的答案完全取决于硬件平台。
-
如果使用
long(我认为在这个所谓的处理器上会是字长的两倍?)太慢,那么您可能需要降级到汇编级别,以便检查溢出标志。 -
@Mike Caron:我并不是说使用 long 太慢了,我只是想知道是否有更快的方法。
-
@Mike Caron:您能否发布一个带有基本示例的答案。如果它不完全适合我的处理器,我不会难过。
-
@Jordan:我很想发表一个答案,但我不做机器组装。 (.NET 程序集,当然……;)