10 진수를 2 진수 (16 비트 이하)로 변환하려고합니다. 내 함수는 8 비트까지 완벽하게 작동하지만 숫자를 16 비트까지 인쇄하려고 할 때 문자 인쇄가 중단됩니다. "int"를 8 비트의 데이터 형식으로 사용했지만 16 비트를 저장하려고하므로 모든 변수에 부호없는 long int를 사용하고 있습니다. 왜 이런 일이10 진수에서 2 진수로 변환 (16 비트)
0000
Process returned 0 (0x0) execution time : 0.063 s
Press any key to continue.
누구나 알고
/* 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;
}
내 출력이 날 수 있습니다 : 여기
코드인가? 미리 감사드립니다. 당신이2^15
을 기대하고 무엇을
mask
의 값을 설정하지 않습니다
C'unsigned int'는 적어도 16 비트 폭으로 보장됩니다. 'uint16_t'와 같은 명시 적 - 너비 유형 중 하나를 고려할 수도 있습니다. –
'2^15'은 당신이 생각하는 것을 의미하지 않습니다. [이 도표 참조] (http://en.cppreference.com/w/c/language/operator_arithmetic) * 실제로 * 무엇을하는지. – WhozCraig
그건 내 문제 였어. 나는 항상 그것을 잊어 버린다. 나는 pow (2,15)를 사용하고있다. 지금은 고맙다. – tadm123