如何用C中的AND运算符限制signed int? 例如
signed int i = -300;
signed int j = i & 0x1F; -> expected value -31
这样可能吗?如果没有,哪个最简单?
更新: 是否可以使用& amp;来锁定给定范围内的有符号整数。运营商?如果不是最简单的方法是什么?
答案 0 :(得分:1)
目前还不清楚你想要达到什么目标。在保持符号位的同时屏蔽低位是您可以在架构上使用单个掩码执行的操作,其中int
表示为符号/幅度。你不太可能想到这个特殊情况。那你的目标是什么?
请注意,屏蔽与限制范围不同。除了在最微不足道的情况下,使用屏蔽无法实现限制范围(琐碎的情况限于0..0
并限制为INT_MIN..INT_MAX
)
如果您只想限制范围,请使用:
int j = i < -31 ? -31 : i > 31 ? 31 : i;
您可以将任何int
值替换为最小值和最大值。 i
在此表达式中被计算两次:如果替换复杂表达式,最好使用临时变量。在某些情况下,编译器可以为这些测试生成没有跳转的代码,忘记尝试手动执行此操作。