我想以下列方式将unsigned int(32bit)A转换为unsigned short int(16bit)B:
换句话说,要转换A但是如果它是> 16bit的最大允许值,则将其设置为最大值.
如何通过位操作或其他非分支方法实现这一点?
它适用于无符号值:
b = -!!(a >> 16) | a;
Run Code Online (Sandbox Code Playgroud)
或类似的东西:
static inline unsigned short int fn(unsigned int a){
return (-(a >> 16) >> 16) | a;
};
Run Code Online (Sandbox Code Playgroud)