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