使用 unsigned char 且不使用字符串将十进制转换为 16 位二进制

标签 c unsigned 16-bit accumulator alu

如果我使用操作数 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/

相关文章:

c# - 无法将 32 位十六进制值分配给整数

java - 位级操作,从short值中获取位

assembly - 无法在 16 位实模式汇编中清除整个屏幕

java - 是否有用于无符号数字类型包装器的 Java 库?

c++ - 将 16 位单 channel 图像写入 Tiff

c++ - csound 是否能够从互联网上提取简单的信息/数据?

c - 这个C宏是什么意思?

c++ - OpenCV - 如何启用滚动到带有图像的窗口?

javascript - C - 使用 AES 加密和解密字符串

SQlite:unix 时间戳的列格式;整数类型