我想知道是否有一种有效的方法将有符号整数转换为无符号短,其中负整数值在无符号短中简单地设置为0(在C ANSI中)。我知道这可以用一个简单的if语句来完成,如下所示:
int val1;
unsigned short val2;
val1=-5;
if(val1<0){
val2=0;
}else{
val2=(unsigned short) val1;
}
这种转换在我的程序中经常发生,而val1
为负的情况非常罕见,所以每次都出现这个if语句似乎有点矫枉过正。
有没有更有效的方法来进行这种转换?
3条答案
按热度按时间qq24tv8q1#
一种常用的方法是直接在表达式中使用布尔结果(
0
或1
)。而不是您的
if
/else
构造尝试如果您追求绝对的最佳性能,请不要忘记使用不同的编译器选项来测量不同的代码。
voase2hg2#
如果您使用gcc,则可以使用内置函数为优化器提供有关整数(或布尔)表达式可能结果的线索。
在下面的例子中,我们将分支标记为likely true:
Adatped到您的代码:
使用指定宽度和位运算符的另一种方法:
smtd7mpg3#
以下是几种不同的方法:
您可以通过将
8
替换为CHAR_BIT
(在limits.h中定义)来使其更加通用。请注意,它不一定比简单的
if/else
语句更有效。