等效的 C 函数,不同的结果

Posted

技术标签:

【中文标题】等效的 C 函数,不同的结果【英文标题】:equivalent C function, different results 【发布时间】:2016-11-12 15:51:25 【问题描述】:

我有一个非常简单的 C 程序,包含以下函数:

int digit(int num)
 
    return num/(10*10*10);

调用 digit(2345) 返回 2 - 正如预期的那样。

但是,如果我以以下方式编写函数(在我看来,这是等效的!!):

int digit2(int num)
 
    return num/(10^3);

然后调用 digit2(2345),返回 260 !!! ......这对我来说似乎完全疯了! 在每种情况下,我都使用以下参数进行编译: gcc -std=c99 -Wall -Wextra -Wpedantic -Werror

这到底是怎么回事???!!!!!!

【问题讨论】:

10^3 表示10 XOR 3,即9 如何在 C 语言中将一个数提高到 X 的幂? Why is my power operator (^) not working? 【参考方案1】:

10^3 表示 10 XOR 3,而不是 10 的 3 次方

要将数字提高到某个幂,请使用math.h 中的pow(number, power)。虽然在你的情况下这可能是矫枉过正,因为pow 足够复杂,可以将浮点数提高到浮点数,但你可以将这个数字乘以它自己。

【讨论】:

这是一个大学作业,我不允许导入库,所以我不能使用 pow 函数...不可能简单地使用 10*10*10 ...如何否则我可以在 C 中获得 10 的 x 次方的结果吗?是不是有一些相当于python中的^的运算符? @steady_progress,好吧,Python 的幂运算符是 **,而不是 ^:最后一个仍然代表 XOR。在 C 中,你要么将一个数字乘以自身,要么使用pow,要么自己编写算法。【参考方案2】:

10^3 表示异或 - 你需要 pow 函数 - 见 https://linux.die.net/man/3/pow

【讨论】:

以上是关于等效的 C 函数,不同的结果的主要内容,如果未能解决你的问题,请参考以下文章

为啥 sklearn 中逻辑回归的等效 class_weights 会产生不同的结果?

Java:PHP 的 ord() 的实现对 ASCII 以外的字符产生不同的结果

C语言函数执行成功时,返回1和返回0,究竟哪个好?

C语言学习笔记C语言函数执行成功时,返回1和返回0,究竟哪个好?

C语言函数返回1和返回0究竟哪个好?

比较不同技术之间的相关性