相关疑难解决方法(0)

仅使用“〜&^ | + << >> =“和20个运算符来实现逻辑右移

因此,我有一项工作,我必须在c中编写仅使用〜,&,^和|的按位运算的函数。,+,<<,>>和=。我只需要使用20个操作。而且我不允许使用控制结构,例如if-else,for,while,switch或其他在条件块中执行代码的东西。同样,类型转换也已结束,并且未在函数头中声明的字节(已提供给我)限制为1个字节或8位值;所以我的十六进制数为0到FF。

我必须编写的函数是逻辑右移。因此,与其用符号位填充它们,不如用0填充

这是我所做的:

int logicalShift(int x, int n) {
    int op=0xFFFFFFFF;
    int tcn=(~n+1);
    int sizeshift=0x20 & tcn;
    op=(op<<sizeshift);
    return ((x>>n) + (op));
}
Run Code Online (Sandbox Code Playgroud)

这就是我期望得到的结果(对于x = 0x80000000和n = 0x01),我期望得到0x40000000,即十进制的1073741824。这就是我得到的。但是(对于x = 0x80000000和n = 0x0,我希望得到0x80000000,但是我得到0x7fffffff,这是我的答案减去一点。我可以加上一点,但是它弄乱了第一个答案。所以我在做什么错了我有一个案子,但没有另一个,我也尝试过。

int logicalShift(int x, int n) {
    int op=0xFFFFFFFF;
    int tcn=(~n+1);
    int sizeshift=0x20 & tcn;
    op=(op<<sizeshift);
    return ((x>>n) + (op  ^ ~n));
}
Run Code Online (Sandbox Code Playgroud)

我以为,如果我对0的情况下的位进行异或运算,以将全为1的符号位清零,那么在经过编译器转换为2的补码时,我得到的结果将不是负数(aka)0x7fffffff。最终使情况变得更糟。请设定正确的方向,我应该考虑什么,为什么?

c bitwise-operators

6
推荐指数
2
解决办法
4777
查看次数

在C中这种逻辑转换有什么问题

我做了这个小程序只是想知道如何在C中进行逻辑移位.

#include <stdio.h>

int main (void)
{
    int n=-2,t;
    t = (int)((unsigned int)n >> 1);
    printf("%d\n",t);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,它输出
2147283747.我在这里遗漏了什么吗?答案不应该是7?

c bit-manipulation

2
推荐指数
1
解决办法
168
查看次数

标签 统计

c ×2

bit-manipulation ×1

bitwise-operators ×1