鱼C论坛

 找回密码
 立即注册
查看: 990|回复: 4

1

[复制链接]
发表于 2023-10-31 15:18:51 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 函数计算商和余数,并将结果打印出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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都是一位符号位+四位数值位的二进制数,且使用补码表示。如果需要使用其他形式的二进制数,请根据实际情况进行修改。

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

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-31 15:55:30 From FishC Mobile | 显示全部楼层
Mike_python小 发表于 2023-10-31 15:20
C语言实现原码恢复余数算法

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

你这个代码只是正常的除法算法,可能不太对,原码恢复余数算法有点麻烦,不过还是谢谢了的回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-31 15:56:27 From FishC Mobile | 显示全部楼层
isdkz 发表于 2023-10-31 15:19
下面是用C语言编写的原码恢复余数算法:



感谢回复,但可能不太对,是要用原码恢复余数算法的方式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-3 21:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表