BetterCallSaul 发表于 2020-2-16 10:58:03

fwinmachao 发表于 2017-9-6 09:52
为什么我的pow(x,y)函数中, x,y如果一个是常量,一个是变量, 就会报错...
# cat a.c
# ...

编译的时候后面加-lm 就没有问题了
# gcc a.c && ./a.out改成
# gcc a.c -o a -lm 应该就可以了
#./a 执行

eliey 发表于 2020-3-12 13:33:01

lzlxc 发表于 2019-1-22 12:29
不知道你理解了没,这是我的理解。int一般为4个字节,也就是32位,去掉一个符号位,还剩31位,那么他能存 ...

您好,我试了一下,long int也是错误,
但long long int 就变成了
-2147483648
这是为什么

Song. 发表于 2020-3-12 20:53:48

fasdfa 发表于 2016-12-10 12:15
示例中result = pow(2,31) - 1; 的- 1是什么意思? 不加这个-1 会转换溢出 但用long long int就不会这 ...

-1不是公式内的内容,只是为了那个二进制转换2的n次方-1的公式吧

郑少波 发表于 2020-3-13 19:37:27

带我学c带我飞

温孚琛 发表于 2020-3-23 20:07:52

fasdfa 发表于 2016-12-10 12:15
示例中result = pow(2,31) - 1; 的- 1是什么意思? 不加这个-1 会转换溢出 但用long long int就不会这 ...

2的N次方-1,是进制转换,2转10

lifeisworthy 发表于 2020-3-27 15:20:14

fasdfa 发表于 2016-12-10 12:15
示例中result = pow(2,31) - 1; 的- 1是什么意思? 不加这个-1 会转换溢出 但用long long int就不会这 ...

int的默认为signed int,这个时候的最大整数就是2的31次方-1.但是long long int的最大值更大,所以不会溢出。希望一起坚持学下去啊

lifeisworthy 发表于 2020-3-27 15:20:53

欧阳0116 发表于 2017-4-28 20:31
能告诉我a.out是什么意思吗,为啥不用-o编译啦 我用-o编译也会出来一个执行文件 运算结果也是一样的 有点不 ...

-lm是因为这里需要链接到一个库

lifeisworthy 发表于 2020-3-27 15:23:01

拒绝绕口令!!!

200 发表于 2020-4-17 21:27:53

正好需要

小小假余 发表于 2020-5-19 22:17:57

欧阳0116 发表于 2017-4-28 20:31
能告诉我a.out是什么意思吗,为啥不用-o编译啦 我用-o编译也会出来一个执行文件 运算结果也是一样的 有点不 ...

平常用-o指出文件,然后通过指出的文件运行,不用-o指出,系统会自动生成一个默认文件,a.out就是所谓的默认文件

小小假余 发表于 2020-5-19 22:19:31


示例中result = pow(2,31) - 1; 的- 1是什么意思? 不加这个-1 会转换溢出 但用long long int就不会这是因为什么?
求大神帮助!

2020.5.11 发表于 2020-5-20 14:35:49

本帖最后由 2020.5.11 于 2020-5-20 15:07 编辑

小小假余 发表于 2020-5-19 22:19
示例中result = pow(2,31) - 1; 的- 1是什么意思? 不加这个-1 会转换溢出 但用long long int就不会   ...

- 1 就是字面意思(减1)。int的最大值是2147483647,刚好是2的31次方减1。
如果不减1就会溢出,溢出部分无法显示,就只取int的最大值。
因为int <= long int ,所以用long long int 不会溢出?(我也是新手,试了long int也会溢出,不确定这个说法成不成立)。

小小假余 发表于 2020-5-24 09:34:02

2020.5.11 发表于 2020-5-20 14:35
- 1 就是字面意思(减1)。int的最大值是2147483647,刚好是2的31次方减1。
如果不减1就会溢出,溢出部 ...

谢谢

littleshu 发表于 2020-6-30 16:33:37

sunnyrubik 发表于 2018-10-11 07:57
你好,你的问题解决了吗?我也不懂这个-1耶,如果解决了的话能告诉我为什么吗?谢谢(虽然时间隔得比较 ...

-1这里与进制转换的规律有关
二进制的11转化为十进制为3
二进制的111转化为十进制为7
二进制的1111转化为十进制为15

我们可以发现:
用二进制1的位数替换成幂的指数位,然后减1
2*2-1=3
2*2*2-1=7
2*2*2*2-1=15
即得出对应的十进制数,所以这里是-1

溢出的话可以试试无符号整型,前面加unsigned

编程爱好者kguj 发表于 2020-7-4 22:18:25

还挺简单的!!!

三个鸽Ge 发表于 2020-8-10 16:34:35

谢谢小甲鱼~我学会怎么使用pow了

孤狼Z 发表于 2020-8-10 21:01:27

fff

刘宗睿 发表于 2020-9-21 06:20:33

可以可以,学会了

jcs70458 发表于 2020-9-28 16:55:01

sunnyrubik 发表于 2018-10-11 07:57
你好,你的问题解决了吗?我也不懂这个-1耶,如果解决了的话能告诉我为什么吗?谢谢(虽然时间隔得比较 ...

减的一个是用来表示0的,以我的理解比如:-2,-1,0,1占了四个位置,表示负数的就有2个位置,表示正数的只有“2-1”个位置。

small豆豆龙 发表于 2020-9-29 13:31:33

thank U C
页: 1 2 [3] 4 5 6
查看完整版本: pow -- 求幂