gpt4 book ai didi

c - 'wrapping' 乘法溢出的结果是什么?

转载 作者:太空狗 更新时间:2023-10-29 16:56:32 25 4
gpt4 key购买 nike

bcache 源 here包含以下行:

schedule_delayed_work(&dc->writeback_rate_update,
dc->writeback_rate_update_seconds * HZ);

writeback_rate_update_seconds 定义为 unsigned intappears to be 32 bit在 x86_64 上,我不确定 HZ 有什么类型,但我相信该值是 1000 并假设它是 32 位或更少。

如果我将 writeback_rate_update_seconds 设置为 2147483647,实际传递给 schedule_delayed_work 的值是多少? schedule_delayed_work 的第二个参数看起来是一个 long,但这并不意味着操作数在乘法溢出之前被提升为 long,对吗?

最佳答案

给定:

#include <stdio.h>
#include <stdlib.h>

int schedule_delayed_work( unsigned long param )
{
printf("value: %lu\n", param);
return 0;
}

int main(int argc, char **argv)
{
unsigned int writeback_rate_update_seconds;
unsigned int HZ;
writeback_rate_update_seconds = 2147483647;
HZ = 1000;
schedule_delayed_work( writeback_rate_update_seconds * HZ );
return 0;
}

您将得到 4294966296 传递给该函数。

如果将函数调用更改为强制转换:

schedule_delayed_work( (unsigned long) writeback_rate_update_seconds * HZ );

...您将得到 2147483647000 传递给函数。

我没有查看 C 标准以了解标准行为是什么,但这是通过以下方式测试的:

Apple LLVM version 8.1.0 (clang-802.0.38)
Target: x86_64-apple-darwin16.7.0

关于c - 'wrapping' 乘法溢出的结果是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44304035/

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