它將十進制轉換爲二進制,但只有32位。當我將它改爲64位時,它不起作用(它似乎只是32位結果的兩倍)。
問題就在這裏。
int n, c, k;
printf("Enter an integer\n");
scanf("%d", &n);
n
爲int
其可以是作爲16位的小。它可能是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
相反,可以使用一個long long int
它具有64位或從stdint.h
這正是64位int64_t
的最小尺寸。我傾向於在代碼中使用顯式寬度類型,這需要特定的寬度才能使讀者更加明白。
long long int
使用%lld
爲scanf
和printf
而int64_t
使用macros from inttypes.h。下面的代碼利用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
使用''和固定大小類型。 –