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