c - 如何在C中使用AND运算符限制signed int?

标签 c

如何在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/

相关文章:

C:仅在声明后赋值时编译

子进程从创建时的第一行开始(使用fork)

有条件地包含 C 中的文件

c - printf ("\%d ",&t); 有什么区别?和 printf ("%d ",t);

c - 当键入 "exit"而不是第一个输入数据时终止程序

c - UNIX C BSD 套接字 TCP_KEEPALIVE 如何检查套接字是否被标记为损坏

c - 什么时候应该忽略关键部分以及什么时候不需要等待?开放式MP

c - 如何验证输入是数字?

c - 随机内存读取与随机内存写入

c - 从函数返回字符串数组的指针