gpt4 book ai didi

与所有其他来源不同的十六进制除法的 C 输出

转载 作者:行者123 更新时间:2023-11-30 18:34:00 24 4
gpt4 key购买 nike

我想除两个十六进制数:

例如:88555680/10000

现在,从在线十六进制计算器,我发现:

8855 as result here

8855.568 as result here

在 python 中我发现:

>>> hex(int("0x88555680",16)//int("0x10000", 16))
'0x8855'

这是我的 C 代码:

# include <stdio.h>

int main() {
int a = 0x88555680;
int b = 0x10000;
int c = a/b;
printf("a%x, b%x, c%x\n", a, b, c);
}

输出:

a88555680, b10000, cffff8856

在 C 中,我找到 8856,而使用 Python 和在线计算器,我找到 8855

问题:为什么C输出不是8855?为什么是8856?不应该是 8855.something 然后截断为 0,即 8855 吗?

我对 C 很陌生,这可能是一个明显的错误。

最佳答案

在常见系统上,int 是一个 32 位类型,其最大值为 0x7FFFFFFF。您的值 0x88555680 超出了 int 的范围。编译器应该警告你这一点;如果您没有看到警告,那么我建议调整编译器设置。

此外,您的代码通过使用 %x 打印 int 会导致未定义的行为。 %x 说明符只能用于unsigned int

要修复这种情况下的代码,请对所有 3 个变量使用 unsigned int 而不是 int。如果您想处理更大的数字,可以使用unsigned long longuint64_t。 (在这些情况下,您还需要更新 printf 格式说明符)。

关于与所有其他来源不同的十六进制除法的 C 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53751370/

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