【发布时间】:2014-06-26 23:00:00
【问题描述】:
我想知道是否有一种有效的方法将有符号整数转换为无符号短整数,其中负整数值在无符号短整数中简单地设置为 0(在 C ANSI 中)。我知道这可以通过一个简单的 if 语句来完成,如下所示:
int val1;
unsigned short val2;
val1=-5;
if(val1<0){
val2=0;
}else{
val2=(unsigned short) val1;
}
这种转换在我的程序中经常发生,val1 是否定的情况非常罕见,所以每次都出现这个 if 语句似乎有点过头了。
有没有更有效的方法来进行这种转换?
【问题讨论】:
-
如果这是一个不常见的情况,分支预测器可能已经足够好了(显然取决于你的架构)。
-
我建议你在
if中写出出现次数较多的条件,然后使用else作为出现次数较少的条件。 -
也可以试试
val2 = val1 * (val1 > 0);并进行测量。 -
您可以创建一个
inline函数(如inline si2us(int si, unsigned short *us))来处理转换。请注意,inline来自 C99,可能无法由 Microsoft Visual Studio C 编译器实现。 -
@JoachimPileborg 我认为它在 MSVC 的 C 编译器中称为
__inline。但无论如何,它不是 ANSI C。
标签: c int type-conversion ansi unsigned-integer