作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在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/
我是一名优秀的程序员,十分优秀!