我试图将十进制数转换为二进制数(最多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.
任何人都知道为什么会这样?提前谢谢。
答案 0 :(得分:4)
mask = 2^15;
未将mask
的值设置为您所期望的2^15
,而不是将2提升到幂15.它是2
和15
的按位异或。
你需要二进制文件1000 0000 0000 0000
。该数字为十六进制0x8000
。因此,使用:
mask = 0x8000;
您还可以在算法中使用有意义的内容。
mask = 1u << 15;