10進数を2進数(最大16ビット)に変換しようとしています。私の機能は8ビットまで完璧に動作しますが、16ビットまでの数字を印刷したい場合は文字の印刷を停止します。 私は8ビットのデータ型として "int"を使用しましたが、16ビットを格納したいので、私はすべての変数にunsigned long intを使用しています。10進数から2進数への変換(16ビット)
ここではコードです:
/* 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.
この出来事はなぜ誰もが知っていますか?前もって感謝します。
C unsigned intは、少なくとも16ビット幅であることが保証されています。また、 'uint16_t'のような明示的な幅の型の1つを考慮することもできます。 –
'2^15'はあなたが思うことを意味するものではありません。実際に何をしているのかについては、[この図を参照](http://en.cppreference.com/w/c/language/operator_arithmetic)を参照してください。 – WhozCraig
それは私の問題でした。私はいつもそれを忘れています。私はpow(2,15)を使用しています。今、働いています。ありがとうございます。 – tadm123