鱼C论坛

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

1

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

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

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

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

1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  1. #include <stdio.h>

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

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

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

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

  16. int main() {
  17.     int X, Y, Q, R;
  18.     printf("请输入X:");
  19.     scanf("%d", &X);
  20.     printf("请输入Y:");
  21.     scanf("%d", &Y);

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

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

  25.     return 0;
  26. }
复制代码


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

在主函数中,我们从用户输入中获取X和Y的值,然后调用 recover_remainder 函数计算商和余数,并将结果打印出来。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-31 15:20:41 | 显示全部楼层
C语言实现原码恢复余数算法

下面是一个使用C语言实现的原码恢复余数算法的示例代码:
  1. #include <stdio.h>
  2. void recover_remainder(int X, int Y, int* Q, int* R) {
  3.     // 判断除数是否为0
  4.     if (Y == 0) {
  5.         printf("Error: 除数不能为0\n");
  6.         return;
  7.     }
  8.     // 判断被除数是否为0
  9.     if (X == 0) {
  10.         *Q = 0;
  11.         *R = 0;
  12.         return;
  13.     }
  14.     // 获取符号位
  15.     int sign_X = (X & 0x8) >> 3;
  16.     int sign_Y = (Y & 0x8) >> 3;
  17.     // 取绝对值
  18.     X = X & 0x7;
  19.     Y = Y & 0x7;
  20.     // 除法运算
  21.     *Q = X / Y;
  22.     *R = X % Y;
  23.     // 恢复符号位
  24.     *Q = (*Q << 3) | sign_X;
  25.     *R = (*R << 3) | sign_X;
  26. }
  27. int main() {
  28.     int X, Y;   // 输入的二进制数
  29.     int Q, R;   // 输出的商和余数
  30.     printf("请输入被除数X(一位符号位+四位数值位):");
  31.     scanf("%d", &X);
  32.     printf("请输入除数Y(一位符号位+四位数值位):");
  33.     scanf("%d", &Y);
  34.     // 调用函数计算商和余数
  35.     recover_remainder(X, Y, &Q, &R);
  36.     // 输出结果
  37.     printf("商:Q = %d\n", Q);
  38.     printf("余数:R = %d\n", R);
  39.     return 0;
  40. }
复制代码

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

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

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

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

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

你这个代码只是正常的除法算法,可能不太对,原码恢复余数算法有点麻烦,不过还是谢谢了的回答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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



感谢回复,但可能不太对,是要用原码恢复余数算法的方式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-22 01:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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