2015-04-05 40 views
-4

如何用C语言中的AND运算符限制signed int? 例如如何用C语言中的AND运算符限制signed int?

signed int i = -300; 
signed int j = i & 0x1F; -> expected value -31 

这样可能吗?如果不是,哪个最简单?

更新: 是否可以使用运算符&来限定给定范围内的带符号整数?如果不是最简单的方法是什么?

+1

预期价值:20.你会如何得到-31? – harold 2015-04-05 09:44:50

+2

确实,你删除了符号位。 – 2015-04-05 09:45:32

+0

你的问题不清楚给我。 – 2015-04-05 09:48:32

回答

1

目前还不清楚你想达到什么目的。在保持符号位的同时屏蔽低位是可以用体系结构上的单个掩码做的事情,其中​​int表示为符号/幅度。你很可能会想到这个奇怪的例子。那么你的目标是什么?

请注意,遮蔽与限制范围不同。除了在最微不足道的情况下,限制的范围不能与屏蔽(琐碎的情况下被限制0..0和限制INT_MIN..INT_MAX

如果你只是想限制使用范围实现这一点:

int j = i < -31 ? -31 : i > 31 ? 31 : i; 

您可以用任何int值取代最小值和最大值。在此表达式中对i进行两次评估:如果替换复杂表达式,最好使用临时变量。在某些情况下,编译器可以为这些测试生成没有跳转的代码,而忘记尝试手动完成此操作。