微信 网站设计模板,房屋装修图片,专业工厂网站建设,沧州有做网站的吗具体代码如下#xff0c;直接运行即可。
#include stdio.h
int main()
{int i, a 0, b 0, c 0, flag 3; // flag相当于指针来指明Q的位置char x[6], y[6];int R[6], Q[6], yb[6], y1[6]; // yb是-y的补码,y1为绝对值yprintf(请输入X(带一位符号位四位数值位…具体代码如下直接运行即可。
#include stdio.h
int main()
{int i, a 0, b 0, c 0, flag 3; // flag相当于指针来指明Q的位置char x[6], y[6];int R[6], Q[6], yb[6], y1[6]; // yb是-y的补码,y1为绝对值yprintf(请输入X(带一位符号位四位数值位的二进制数如1011));scanf(%5s, x); while ((c getchar()) ! \n c ! EOF); // 清除缓冲区中的剩余字符printf(请输入Y(带一位符号位四位数值位的二进制数如-1101));scanf(%5s, y); // printf(X%s\n,x);// printf(Y%s\n,y);y1[0] 0; // 绝对值y一定是正的符号位为0for (i 4; i 1; i--){if (y[i] 1){ // 将字符型的y变成int型的绝对值yy1[i] 1;}elsey1[i] 0;}// printf(y的绝对值y1);// for (i 0; i 4; i)// {// printf(%d, y1[i]);// }// printf(\n);if (x[0] ){a 0;x[0] 0; // 符号位计算}else // 这里我怀疑是有点问题先加个大括号先出问题再删{ a 1;x[0] 1;}if (y[0] ){b 0;y[0] 0;}else // 这里我怀疑是有点问题先加个大括号先出问题再删{ b 1;y[0] 1;}if (a b 1) //只有一个1一个0异号的时候才结果为负{c 1;}elsec 0; // c为符号位yb[0] 1;for (i 4; i 0; i--){ //-y的补码计算if (y1[i] 1) //!!!我这里把y改成了y1yb[i] 0; // 取反//我这里不取反试试// yb[i] 1;elseyb[i] 1;//我这里不取反试试// yb[i] 0;}// printf(y1取反后的值);// for (i 0; i 4; i)// {// printf(%d, yb[i]);// }// printf(\n);yb[4] yb[4] 1; // 末尾加一for (i 4; i 0; i--){if (yb[i] 2){ // 满2进一位yb[i] 0;yb[i - 1] 1;}if (yb[i] 3){ // 满3进一位 且留下1yb[i] 1;yb[i - 1] 1;}}// printf(-y1的补码yb为);// for (i 0; i 4; i)// {// printf(%d, yb[i]);// }// printf(\n);for (i 4; i 0; i--){Q[i] 0; // 给Q赋初值}R[0] 0; // 设置余数for (i 4; i 1; i--){ // 给R做初始化if (x[i] 1)R[i] 1;elseR[i] 0;}// printf(R的初始值); // 余数符号位为0 数值位为x的值// for (i 0; i 4; i)// {// printf(%d, R[i]);// }// printf(\n);while (flag 1){ // 当flag1时相当于全部除完if (flag 1){ // 最后一步不移位 单独提出来for (i 4; i 0; i--){ // 余数R加上-y的补码R[i] yb[i];if (R[i] 2){ // 满2进一位R[i] 0;R[i - 1] 1;}if (R[i] 3){ // 满3进一位 且留下1R[i] 1;R[i - 1] 1;}}if (R[0] 1){ // 若符号位为1 说明不够减 再加y恢复余数,不够减Q0Q[4] 0;}elseQ[4] 1;break;}for (i 4; i 0; i--){ // 余数R加上-y的补码R[i] yb[i];if (R[i] 2){ // 满2进一位R[i] 0;R[i - 1] 1;}if (R[i] 3){ // 满3进一位 且留下1R[i] 1;R[i - 1] 1;}}if (R[0] 1){ // 若符号位为1 说明不够减 再加y恢复余数,不够减Q0Q[4] 0;flag - 1; // 向左移动一位for (i 4; i 1; i--){R[i] y1[i];if (R[i] 2){ // 满2进一位R[i] 0;R[i - 1] 1;}if (R[i] 3){ // 满3进一位 且留下1R[i] 1;R[i - 1] 1;}} // 不够减先恢复余数再左移for (i 0; i 3; i){ // 左移R[i] R[i 1];}//!!! 这里应该是逻辑左移的所以我重新设为0// R[4] Q[0]; // 将Q的第一个移动给RR[4] 0 ;for (i 0; i 3; i){ // 左移Q[i] Q[i 1];}} // 恢复后R[0]符号位又变成了0else{ // 够减直接左移Q[4] 1; // 够减Q为1flag - 1; // 向左移动一位for (i 0; i 3; i){ // 左移R[i] R[i 1];}//!!! 还是逻辑左移设为0// R[4] Q[0]; // 将Q的第一个移动给RR[4] 0;for (i 0; i 3; i){ // 左移Q[i] Q[i 1];}}}printf(商Q的值);for (i 0; i 4; i){printf(%d, Q[i]);}printf(\n);printf(余数R的值0.000);for (i 0; i 4; i){printf(%d, R[i]);}printf(\n);printf(X/Y%d., c);for (i 1; i 4; i){printf(%d, Q[i]);}printf(\n);return 0;
}