10 진수를 2 진수로 변환하지만 32 비트 만 변환합니다. 64 비트로 변경하면 작동하지 않습니다 (32 비트 결과를 두 배로 늘리는 것처럼 보입니다).
문제가 있습니다.
int n, c, k;
printf("Enter an integer\n");
scanf("%d", &n);
n
16 비트만큼 작을 수있는 int
이다. 64 비트 일 수도 있지만 32 비트 일 것입니다. 64 비트 숫자를 입력하려고하면 쓰레기가 생깁니다.
#include <stdio.h>
int main() {
int n;
printf("sizeof(int) == %zu\n", sizeof(int));
printf("Enter an integer\n");
scanf("%d", &n);
printf("n = %d\n", n);
}
$ ./test
sizeof(int) == 4
Enter an integer
12345678901
n = -539222987
대신 64 비트 또는 정확히 64 비트 stdint.h
에서 int64_t
의 최소 크기를 가진 long long int
을 사용할 수 있습니다. 독자에게 더 명확하게하기 위해 특정 너비가 필요한 코드에서 명시적인 너비 형식을 사용하는 것이 좋습니다. int64_t
는 macros from inttypes.h을 사용하는 반면
long long int
는 scanf
에 대한 %lld
및 printf
를 사용합니다. 아래 코드는 C가 자동으로 상수 문자열을 연결하는 것을 이용합니다. "foo" "bar"
및 "foobar"
은 동일합니다.
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
int main() {
int64_t n;
printf("Enter an integer\n");
scanf("%"SCNd64, &n);
printf("n = %"PRId64"\n", n);
}
$ ./test
Enter an integer
12345678901
n = 12345678901
어떻게 64 비트로 변환하는? 'c = 63'? – AntonH
@AntonH : int가 64 비트가 아니라면, 정의되지 않은 동작을 발생시킵니다. – Olaf
은 ''및 고정 크기 유형을 사용합니다. –