【发布时间】:2018-10-26 10:33:36
【问题描述】:
这是我需要关注的表格https://imgur.com/a/JuLpQZt
这是我现在的代码
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
void arithmetic();
int ALU(unsigned char operand1, unsigned char operand2, unsigned char control_signals);
int askOperand1();
int askOperand2();
unsigned char operand1;
unsigned char operand2;
unsigned char control_signals;
const int ACC = 16; //ACC = ACCUMULATOR
int main()
{
for(;;)
{
system("cls");
ALU(operand2,operand2,control_signals);
}
getch();
return 0;
}
int ALU(unsigned char operand1, unsigned char operand2, unsigned char control_signals)
{
operand1=askOperand1();
operand2=askOperand2();
int pos1,pos2;
unsigned char bin8_1[] = "00000000";
unsigned char bin8_2[] = "00000000";
/*OPERAND 1*/
for (pos1 = 8; pos1 >= 0; --pos1)
{
if (operand1 % 2)
bin8_1[pos1] = '1';
operand1 /= 2;
}
printf("\n\nBinary Equivalence of Operand 1: %s",bin8_1);
/*OPERAND 2*/
for (pos2 = 8; pos2 >= 0; --pos2)
{
if (operand2 % 2)
bin8_2[pos2] = '1';
operand2 /= 2;
}
printf("\n\nBinary Equivalence of Operand 2: %s",bin8_2);
/*ARITHMETIC FUNCTIONS*/
int option, remainder = 0, sum[ACC], k;
arithmetic();
scanf("%d",&option);
switch(option)
{
case 1: //ADDITION
while (bin8_1 != 0 || bin8_2 != 0)
{
sum[k++] =(bin8_1 % 10 + bin8_2 % 10 + remainder) % 2;
remainder =(bin8_1 % 10 + bin8_2 % 10 + remainder) / 2;
bin8_1 = bin8_1 / 10;
bin8_2 = bin8_2 / 10;
}
if (remainder != 0)
sum[k++] = remainder;
--k;
printf("Sum of two binary numbers: ");
while (k >= 0)
printf("%d", sum[k--]);
break;
case 2: //SUBTRACTION VIA 2'S COMPLEMENT
break;
case 3: //MULTIPLICATION
break;
case 4: //DIVISION
break;
}
}
int askOperand1()
{
int ask1;
printf("\n\nEnter Operand 1(in decimal): ");
scanf("%d",&ask1);
if(ask1>255)
{
printf("\n\nINVALID! 0-255 ONLY! TRY AGAIN. EXITTING PROGRAM!");
getch();
exit(1);
}
return ask1;
}
int askOperand2()
{
int ask2;
printf("\nEnter Operand 2(in decimal): ");
scanf("%d",&ask2);
if(ask2>255)
{
printf("\n\nINVALID! 0-255 ONLY! TRY AGAIN. EXITTING PROGRAM!");
getch();
exit(1);
}
return ask2;
}
void arithmetic()
{
printf("\n\n");
printf("[1] ADDITION\n");
printf("[2] SUBTRACTION\n");
printf("[3] MULTIPLICATION\n");
printf("[4] DIVISION\n");
printf("\nOption: ");
}
输入只能是 0-255 的十进制数。然后它将被转换为二进制。这两个二进制文件将被添加,然后打印出 16 位输出。我也对 control_signals 变量一无所知,我不能问我的老师,因为他已经离开了 1 周。
【问题讨论】:
-
发个MVCE怎么样?显示
bin8_1和bin8_2的声明。 -
在您的previous question 中,您被要求不要将数字转换为 cmets 中的字符串。你为什么还在用
unsigned char*? -
@DeanzTinio 两个提示:(1) C 不是一种通过反复试验来学习的语言——你确实需要先完成一些基础教程。 (我可以为您提供mine。)(2)如果您将格式正确的代码粘贴到问题中而不是发布图像链接,您将在这里获得更好的帮助,因为很多人不会费心去追逐那些。
-
@DeanzTinio 不发布新问题,但edit 这个问题。
-
@DeanzTinio 另一个提示:编程中最重要的技能之一是注意细节。在 C 中,类型 (1)
unsigned char、(2)unsigned char *(指向无符号字符的指针)和 (3)unsigned char [](无符号字符数组)之间存在巨大差异。在你原来的问题中,你坚持你的变量是unsigned char,但是你的编译器告诉你不是这样,然后当Ajay问你为什么使用unsigned char *时,你说这是因为你必须这样做(即使这与你的说法相矛盾) d 前面说过)。小心这些东西!细节很重要!
标签: c binary char unsigned alu