c - 使用位运算符执行此操作

标签 c bit-manipulation

如果 0 到 255 之间的整数等于 0 或等于 224,我想要 eval。

我有这个代码:

if (!num || 224 == num)

有没有办法使用一些按位运算来做到这一点?

我尝试过这个,我有有效的:0, 31, 32, 63 ,64, 95, 96, 127, 128, 159, 160, 191, 192, 223, 224, 255。显然是不好的,因为我只需要0 和 224。

!((num+1) & 30)

最佳答案

是的,输入的范围使其变得稍微容易一些。

您可以使用(x - 1) >> 31来检测x是否为0(技术上不可移植,但通常可以工作)

它依赖于 x 永远不会小于 0,并且不可移植地依赖于有符号 int 上的右移是算术移位(通常是这种情况)。

同样,您可以使用 ((x ^ 224) - 1) >> 31 来检测 224。

就像这样把它们放在一起:

int mask = ((x - 1) >> 31) | (((x ^ 224) - 1) >> 31);

就这样。

关于c - 使用位运算符执行此操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18394457/

相关文章:

c - 为什么我的可变参数在 C 中不起作用?

c - 什么是用c写的windows系统调用?

c - 使用 pthread 分割和搜索数组段时出现问题

c - 如何将一个位序列添加到另一个序列的末尾?

c - GDB读取内存地址

c - 从 create_proc_read_entry 迁移到 proc_create 并使用 seq_files

c# - 确定具有 FlagsAttribute 的枚举是否具有唯一的位值

algorithm - 创建整数数据结构并查找给定整数位于哪个组件

c# - 在 64 位整数中查找最高和最低有效位集的快速方法

java - Java 中的整数对应哪一位