将 signed int 转换为 unsigned short,在 C 中将负值设置为零

标签 c int type-conversion ansi unsigned-integer

我想知道是否有一种有效的方法可以将有符号整数转换为无符号短整数,其中负整数值在无符号短整数(在 C ANSI 中)中被简单地设置为 0。我知道这可以通过如下简单的 if 语句来完成:

int val1;
unsigned short val2;

val1=-5; 
if(val1<0){
   val2=0;
}else{
   val2=(unsigned short) val1;
}

这种转换在我的程序中经常发生,并且 val1 为负的情况非常罕见,所以每次都出现这种 if 语句似乎有点过分了。

有没有更有效的方法来进行这种转换?

最佳答案

通常有效的一件事是直接在表达式中使用 bool 结果(01)。

而不是你的 if/else 构造 try

val2 = val1 * (val1 > 0);

如果您追求绝对最佳性能,请不要忘记使用不同的编译器选项来衡量不同的代码。

关于将 signed int 转换为 unsigned short,在 C 中将负值设置为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23560626/

相关文章:

c# - pinvoke:结构在C端填充,但回到家后数据消失了

c - SIGALRM、间隔计时器和 sleep() 问题

c++ - Double 到 int 的转换在幕后?

c - 类型转换输出

一元负数和 float 转换的组合

c - malloc 的每个现代实现都会在程序中引入 UB 吗?

c - 拆分/解析 char 数组并获取两个标记 C 之间的值

c# - 从 Java 到 C# 的函数

c - 使用int打印字符常量

c - C 中值之间的意外类型转换