叶子也 发表于 2023-10-31 15:18:51

1

本帖最后由 叶子也 于 2023-11-1 17:25 编辑

1

isdkz 发表于 2023-10-31 15:19:56

下面是用C语言编写的原码恢复余数算法:

#include <stdio.h>

void recover_remainder(int X, int Y, int* Q, int* R) {
    int sign = (X < 0) ^ (Y < 0); // 计算符号位
    X = X < 0 ? -X : X; // 取X的绝对值
    Y = Y < 0 ? -Y : Y; // 取Y的绝对值

    *Q = 0; // 初始化商
    *R = X; // 初始化余数

    while (*R >= Y) {
      *Q = *Q + 1; // 商加1
      *R = *R - Y; // 余数减去Y
    }

    if (sign) {
      *Q = -*Q; // 如果符号位为1,将商取负数
    }
}

int main() {
    int X, Y, Q, R;
    printf("请输入X:");
    scanf("%d", &X);
    printf("请输入Y:");
    scanf("%d", &Y);

    recover_remainder(X, Y, &Q, &R);

    printf("Q = %d\n", Q);
    printf("R = %d\n", R);

    return 0;
}


这个算法首先计算X和Y的符号位,然后取X和Y的绝对值。接下来,初始化商为0,余数为X。然后进行循环,每次将商加1,余数减去Y,直到余数小于Y为止。最后,如果符号位为1,将商取负数。

在主函数中,我们从用户输入中获取X和Y的值,然后调用 recover_remainder 函数计算商和余数,并将结果打印出来。

Mike_python小 发表于 2023-10-31 15:20:41

C语言实现原码恢复余数算法

下面是一个使用C语言实现的原码恢复余数算法的示例代码:


#include <stdio.h>

void recover_remainder(int X, int Y, int* Q, int* R) {
    // 判断除数是否为0
    if (Y == 0) {
      printf("Error: 除数不能为0\n");
      return;
    }

    // 判断被除数是否为0
    if (X == 0) {
      *Q = 0;
      *R = 0;
      return;
    }

    // 获取符号位
    int sign_X = (X & 0x8) >> 3;
    int sign_Y = (Y & 0x8) >> 3;

    // 取绝对值
    X = X & 0x7;
    Y = Y & 0x7;

    // 除法运算
    *Q = X / Y;
    *R = X % Y;

    // 恢复符号位
    *Q = (*Q << 3) | sign_X;
    *R = (*R << 3) | sign_X;
}

int main() {
    int X, Y;   // 输入的二进制数
    int Q, R;   // 输出的商和余数

    printf("请输入被除数X(一位符号位+四位数值位):");
    scanf("%d", &X);

    printf("请输入除数Y(一位符号位+四位数值位):");
    scanf("%d", &Y);

    // 调用函数计算商和余数
    recover_remainder(X, Y, &Q, &R);

    // 输出结果
    printf("商:Q = %d\n", Q);
    printf("余数:R = %d\n", R);

    return 0;
}


在上面的代码中,我们首先定义了一个recover_remainder函数,用于实现原码恢复余数算法。该函数接收两个输入参数X和Y,分别表示被除数和除数。函数内部首先判断除数是否为0,若为0则输出错误信息。接着判断被除数是否为0,若为0则直接返回商和余数都为0。然后,获取被除数和除数的符号位,并对其取绝对值。最后进行除法运算,计算出商和余数,并恢复符号位。

在main函数中,我们通过输入函数scanf获取被除数X和除数Y的值,并调用recover_remainder函数计算商和余数。最后,将计算结果输出。

请注意,上述代码假设输入的二进制数X和Y都是一位符号位+四位数值位的二进制数,且使用补码表示。如果需要使用其他形式的二进制数,请根据实际情况进行修改。

希望这个示例能够帮助您理解并实现原码恢复余数算法。如果您有其他疑问,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

叶子也 发表于 2023-10-31 15:55:30

Mike_python小 发表于 2023-10-31 15:20
C语言实现原码恢复余数算法

下面是一个使用C语言实现的原码恢复余数算法的示例代码:

你这个代码只是正常的除法算法,可能不太对,原码恢复余数算法有点麻烦,不过还是谢谢了的回答

叶子也 发表于 2023-10-31 15:56:27

isdkz 发表于 2023-10-31 15:19
下面是用C语言编写的原码恢复余数算法:




感谢回复,但可能不太对,是要用原码恢复余数算法的方式
页: [1]
查看完整版本: 1