gpt4 book ai didi

c - 如何将 64 位十进制转换为二进制?

转载 作者:太空宇宙 更新时间:2023-11-04 02:31:23 24 4
gpt4 key购买 nike

所以我有这个代码

int main()
{
int n, c, k;

printf("Enter an integer\n");
scanf("%d", &n);

printf("%d in binary is:\n", n);

for (c = 31; c >= 0; c--)
{
k = n >> c;

if (k & 1)
printf("1");
else
printf("0");
}

printf("\n");

return 0;

}

它将十进制转换为二进制,但仅限于 32 位。当我将它更改为 64 位时,它不起作用(看起来它只是将 32 位的结果加倍)。同时它可以很好地处理 8 或 4 位等。我做错了什么?

最佳答案

It converts decimal into binary but only in 32 bits. When I change it into 64 bits it doesn't work (it seems like it just doubles the result from 32 bits).

问题就在这里

  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

相反,您可以使用最小大小为 64 位的 long long int 或来自 stdint.hint64_t 正好是 64 位。我更喜欢在需要特定宽度的代码中使用显式宽度类型,以使其对读者更明显。

long long int 使用 %lld 用于 scanfprintfint64_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

关于c - 如何将 64 位十进制转换为二进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42844023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com