gpt4 book ai didi

objective-c - 为什么在 C 中将大 double 转换为 long 有时会返回正值而有时会返回负值?

转载 作者:太空宇宙 更新时间:2023-11-04 00:06:13 24 4
gpt4 key购买 nike

我将其放入 iOS 测试用例中并在(32 位 iPad)模拟器中运行:

double whu = 3166323616091.220215;
NSLog(@"Double: %f", whu);
NSLog(@"Long: %ld", (long)whu);
NSLog(@"Double: %f", 3166323616091.220215);
NSLog(@"Long: %ld", (long)3166323616091.220215);

输出是:

2014-04-23 13:40:50.904 xctest[53336:303] Double: 3166323616091.220215
2014-04-23 13:40:50.905 xctest[53336:303] Long: -2147483648
2014-04-23 13:40:50.906 xctest[53336:303] Double: 3166323616091.220215
2014-04-23 13:40:50.907 xctest[53336:303] Long: 2147483647

我明白为什么它将大 double 值截断为 long(32 位)的最大值。但是,为什么转换变量 会返回负值,而转换literal 会返回正值?事实上,我根本不明白为什么要返回负片。我是否遗漏了一些与精度有关的东西?

最佳答案

转换变量将导致运行时代码进行转换,由此产生的溢出会产生最大负数(0x80000000 是未定义的结果,但运行时正在执行的操作)。转换常量将导致编译器转换数字,它确实转换为最大正数 (0x7FFFFFFF)。

关于objective-c - 为什么在 C 中将大 double 转换为 long 有时会返回正值而有时会返回负值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23254839/

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