これは10進数を2進数に変換しますが、32ビットしか変換しません。 64ビットに変更すると動作しません(32ビットからの結果が2倍になったようです)。
ここに問題があります。
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ビットですstdint.h
から64ビットまたはint64_t
の最小サイズを持っているlong long int
を使用することができます。私は、明示的な幅の種類を特定の幅を必要とするコードで使用することを優先しています。 int64_t
はmacros from inttypes.hを使用しながら、
long long int
はscanf
とprintf
ため%lld
を使用しています。以下のコードは、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
は「」と固定サイズの種類を使用します。 –