如果我使用操作数 1 和操作数 2 作为整数,我的代码就可以工作。使用 unsigned char 操作数 1 不起作用。你能帮我吗?
int ALU(unsigned char operand1, unsigned char operand2)
{
printf("Enter Operand 1(in decimal): ");
scanf("%d",&operand1);
printf("\nEnter Operand 2(in decimal): ");
scanf("%d",&operand2);
char bin16_1[] = "0000000000000000";
int pos;
for (pos = 16; pos >= 0; --pos)
{
if (operand1 % 2)
bin16_1[pos] = '1';
operand1 /= 2;
}
printf("\n\nBinary Equivalence of Operand 1: %s",bin16_1);
如果我输入十进制的 4096 或 512 或 65536,输出将为 0000 0000 0000 00000,这是错误的。
最佳答案
char *reverse(char *str)
{
size_t len = strlen(str);
for (size_t pos = 0; pos < len / 2; pos++)
{
char tmp = str[pos];
str[pos] = str[len - 1 - pos];
str[len - 1 - pos] = tmp;
}
return str;
}
char *toBin(char *buff, uint16_t value, int pad)
{
size_t nbits = 16;
char *work_buff = buff;
do
{
*work_buff++ = value & 1 ? '1' : '0';
value >>= 1;
nbits--;
}while(value);
if (pad)
{
while (nbits--)
{
*work_buff++ = '0';
}
}
*work_buff = 0;
return reverse(buff);
}
关于使用 unsigned char 且不使用字符串将十进制转换为 16 位二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50367681/