等效的 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 以外的字符产生不同的结果