不使用 << 或 >> 检查 32 位符号位

标签 c bit sign

<分区>

我需要一种方法来仅使用运算符在 32 位整数(最高有效位)中找到符号位! ~ & ^ | +。我只允许使用最大为 0xFF 的常量,但可以构造更大的数字。而且必须是内联代码,不能有循环和条件

是的,这是一个作业,但这不是全部问题,它只是我需要检查的一个小案例。

我知道我可以通过执行 x>>31 来获得符号,这可以使用除法来完成,但这只会导致需要更多我无法使用的位移 :(

运算符(operator)越少越好,因为我只允许 10 人来完成整个问题,这只是一个小案例。

这是为了检查数字 x 是否等于 0x7FFFFFFF 的问题。我的代码现在的读取方式是 [(is x neg?) & (is x+1 negative)]。如果 x 等于 0x7FFFFFFF,则加 1 将使缓冲区溢出,导致 x 变为负数。但这种逻辑只有在 x 事先不为负时才有效。因此是第一部分。

请帮帮我???

最佳答案

测试符号位很困难;对于整个问题,我认为您正在寻找类似的东西

!((~x) ^ (x + 1))

此测试 ~xx + 1 按位相同,即是相同的数字。

关于不使用 << 或 >> 检查 32 位符号位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12578650/

相关文章:

c - 嵌入式C : Add values in a list throw the las one out

python - 如何找到python中两个数字不同的最低有效位的位置?

c++ - C/C++ : Force Bit Field Order and Alignment

git - 提交签名解决了什么问题或威胁?

C程序如何反转数字需要解释

名称和 2 个 double 的 C 函数,循环 5 次并通过引用传递

c - 将 redisContext 传递给另一个函数时,libhiredis 不起作用

C++:按位与

git - GPG 签署所有没有 stash 的 git 提交

android-studio - Android 3.4-如何生成签名的APK和构建APK?