C十进制到二进制转换器(16位)

时间:2016-09-10 21:40:35

标签: c binary decimal

我试图将十进制数转换为二进制数(最多16位)。我的功能最多可以工作8位,但是当我想打印最多16位的数字时,它会停止打印字符。 我用" int"作为我的8位数据类型,但由于我想在每个变量中使用无符号long int存储16位I。#/ p>

以下是代码:

/* Program to convert decimal to binary (16 bits) */

#include <stdio.h>
#include <string.h>

char *byte_to_binary_str(long unsigned int byte);

int main()
{

 printf("%s",byte_to_binary_str(32768));  //1000000 0000000
    return 0;
}

char *byte_to_binary_str(long unsigned int byte)
{
    static char bit_string[17];
    bit_string[0] = '\0';

    long unsigned int mask;
    for (mask = 2^15; mask > 0; mask >>= 1) {
        /* Check if the mask bit is set */
        strcat(bit_string, byte & mask ? "1" : "0");
    }

    return bit_string;
}

我的输出给了我:

0000
Process returned 0 (0x0)   execution time : 0.063 s
Press any key to continue.

任何人都知道为什么会这样?提前谢谢。

1 个答案:

答案 0 :(得分:4)

mask = 2^15;

未将mask的值设置为您所期望的2^15,而不是将2提升到幂15.它是215的按位异或。

你需要二进制文件1000 0000 0000 0000。该数字为十六进制0x8000。因此,使用:

mask = 0x8000;

您还可以在算法中使用有意义的内容。

mask = 1u << 15;