gpt4 book ai didi

c - 64 位移位的错误答案

转载 作者:行者123 更新时间:2023-12-02 05:49:31 25 4
gpt4 key购买 nike

这是我的代码:

#include <stdio.h>
#include <inttypes.h>

int main()
{
uint64_t a = 1000000000;
printf("%" PRIu64 "\n", a << 40);
return 0;
}

这段代码返回

11153727427136454656

正确答案是 1099511627776000000000

这是怎么回事?我正在 64 位 Ubuntu 12.04 上使用 gcc 4.8.1 进行编译。

最佳答案

1000000000 << 40数学 结果是1099511627776000000000 ,它超过了 264-1(实际上它超过了 269)并且不能表示为 uint64_t .

对于带符号的左操作数,这将是导致未定义行为的溢出。对于无符号左操作数,结果以 2N 为模进行缩减,其中 N 是左操作数类型的宽度(在本例中 N 为 64)。

在十六进制中,我们有 0x3b9aca00 << 40产生 0x3b9aca000000000000 .减少这个模块 264 相当于截断除 64 个低位之外的所有位,这会产生 0x9aca000000000000 ,即 11153727427136454656十进制。

关于c - 64 位移位的错误答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536735/

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