Я пытаюсь преобразовать десятичное число в двоичный (максимум 16 бит). Моя функция отлично работает до 8 бит, но когда я хочу печатать цифры до 16 бит, она останавливает печать символов. Я использовал «int» в качестве моего типа данных для 8 бит, но так как я хочу хранить 16 бит, я использую unsigned long int в каждой переменной.C decimal to binary converter (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'. –
'2^15' не означает, что вы думаете, что он делает. [См. Этот график] (http://en.cppreference.com/w/c/language/operator_arithmetic) для того, что он делает на самом деле. – WhozCraig
Это была моя проблема. Я ВСЕГДА забываю об этом .. Я использую pow (2,15), и теперь он работает, спасибо большое – tadm123