gpt4 book ai didi

c - 为什么我不能在 64 位机器上将 2^64 存储在 unsigned long 中?

转载 作者:行者123 更新时间:2023-12-01 15:52:29 27 4
gpt4 key购买 nike

我错过了什么吗?我运行了以下命令:

$ uname -a
Linux archlinux 4.16.6-1-ARCH #1 SMP PREEMPT Mon Apr 30 12:30:03 UTC 2018 x86_64 GNU/Linux

然后在 C 程序中:

long l;
printf("sizeof long: %d\n", sizeof l);

哪个输出:

sizeof long: 8

这不是说每个 long 包含 64 位吗?但是当我执行下面这行代码时:

printf("2^64: %ld\n",  1UL<<64);

我从 gcc 收到以下警告:

sizeof.c:14:29: warning: left shift count >= width of type [-Wshift-count-overflow]

如果我改为将左移位减少到 63,则警告消失,但输出:

2^64: -9223372036854775808

这让我相信我假设 unsigned long 是 64 位可用位是不正确的,但为什么呢?

最佳答案

数字 2^64 需要 65 位才能正确表示二进制 - 第 65 位已设置,其余为零。

这与无符号 8 位数字最多只能达到 255 (2^8 - 1),无符号 16 位数字最多只能达到 65535 (2^16 - 1) 等等的原因相同.

关于c - 为什么我不能在 64 位机器上将 2^64 存储在 unsigned long 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50377336/

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