鱼C论坛

 找回密码
 立即注册
查看: 6752|回复: 17

[已解决]当实参类型与函数的形参类型不一致时

[复制链接]
发表于 2018-6-20 23:44:43 | 显示全部楼层 |阅读模式
10鱼币
当函数形参为int而传入double类型的参数时,为什么不是将double强制转换?而是输出了一个奇怪的值


  1. #include<iostream>
  2. using namespace std;

  3. void doubleToInt(int test){
  4.         cout<<"调用函数,传入double,参数为int,字节数为:"<<sizeof(test) << '\t' << test;
  5. }


  6. int main(){
  7.         int int_number;
  8.         double double_number;
  9.        
  10.         cin >> int_number;
  11.         cin >> double_number;
  12.         cout << "int_number:" << int_number<<endl;
  13.         cout << "double_number:" << double_number<<endl;
  14.         cout << "调用函数前" << endl << "int_number位数:" << sizeof(int_number) << endl << "double_number位数:" << sizeof(double_number) << endl;
  15.         doubleToInt(double_number);
  16.          
  17. }

复制代码
最佳答案
2018-6-20 23:44:44
这和函数调用没有关系
1.png

如果 bit64 的值超过了 bit32,那么转换结果是 0x80000000
微信截图_20180620234417.png

最佳答案

查看完整内容

这和函数调用没有关系 如果 bit64 的值超过了 bit32,那么转换结果是 0x80000000
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-20 23:44:44 | 显示全部楼层    本楼为最佳答案   
这和函数调用没有关系
1.png

如果 bit64 的值超过了 bit32,那么转换结果是 0x80000000
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-20 23:52:56 | 显示全部楼层
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-6-20 23:54:41 | 显示全部楼层
本帖最后由 程序员的救赎 于 2018-6-21 00:02 编辑


你试下输入长度超出int范围的double类型数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-21 00:15:05 | 显示全部楼层
It is a scientific notation, 1e+09 simply means 1 x 10 to the ninth power. = 1000000000 which is a rounded up version of your 999 999 999.

To set formatting of floating variables you can use a combination of setprecision(n), showpoint and fixed.

  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <iomanip>
  4. using namespace std;

  5. void doubleToInt(int test) {
  6.         cout << "调用函数,传入double,参数为int,字节数为:" << sizeof(test) << '\t' << test;
  7.         std::getchar();
  8. }


  9. int main() {
  10.         int int_number;
  11.         double double_number;

  12.         int_number = 123456789;
  13.         double_number = 999999999;
  14.         cout << "int_number:" << int_number << endl;
  15.         cout << "double_number:[_setprecision(9)] " << setprecision(9) << double_number << endl;
  16.         cout << "double_number:[_fixed] " << fixed << double_number << endl;
  17.         cout << "double_number:[_showpoint] " << showpoint << double_number << endl;

  18.         cout << "调用函数前" << endl << "int_number位数:" << sizeof(int_number) << endl << "double_number位数:" << sizeof(double_number) << endl;
  19.         doubleToInt(double_number);

  20.         std::getchar();
  21.         return 0;
  22. }
复制代码


Scientific notation.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-21 00:34:12 | 显示全部楼层
1.png
2.png
3.png


我不是很明白这些英文描述
要我猜的话就是
超了 32位的范围,结果就是 80000000H
超了 64位的范围,结果就是 8000000000000000H
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-21 00:36:20 | 显示全部楼层
4.png

我看不懂这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-21 00:51:28 | 显示全部楼层
向你学习!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-6-21 12:58:10 | 显示全部楼层
xypmyp 发表于 2018-6-21 00:15
It is a scientific notation, 1e+09 simply means 1 x 10 to the ninth power. = 1000000000 which is a r ...

你理解错我的问题了,不是那个科学计数法的问题。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-21 18:03:57 | 显示全部楼层
程序员的救赎 发表于 2018-6-21 12:58
你理解错我的问题了,不是那个科学计数法的问题。。。

sorry 看錯了, 1e+09 看起來挺奇怪, 不好意思

引用"人造人"
(我不是很明白这些英文描述
要我猜的话就是
超了 32位的范围,结果就是 80000000H
超了 64位的范围,结果就是 8000000000000000H)

int 正數只可以表示 2^(31) -1 = 2,147,483,647 個, 最高位為補碼; 80000000h = 2,147,483,648;
當 = 2,147,483,648 時 除了第32位, 其他全為0那結果就是 -2,147,483,648.

我理解為
如果數值 > 7FFFFFFFH && != 80000000H 的范围,结果就為 80000000H
那麼你打任何數 > 2147483648 的時候都會得出 -2147483648

* 但是改成 double_number = 2147483647 + 2 ;
輸出為 -2147483647 而不是 -2147483648
2's complement.png
question.png

评分

参与人数 1荣誉 +3 鱼币 +5 贡献 +2 收起 理由
程序员的救赎 + 3 + 5 + 2 好的,谢谢

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-21 18:22:38 | 显示全部楼层
xypmyp 发表于 2018-6-21 18:03
sorry 看錯了, 1e+09 看起來挺奇怪, 不好意思

引用"人造人"

2147483647 + 2 = 2147483649 = 0x80000001

1.png
2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-21 18:33:32 | 显示全部楼层
3.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-21 18:34:15 | 显示全部楼层
  1. 1>c:\visualstudioprojects\c++\c++\main.cpp(14): warning C4307: “+”: 整型常量溢出
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-21 19:02:47 | 显示全部楼层
人造人 发表于 2018-6-21 18:22
2147483647 + 2 = 2147483649 = 0x80000001

其實我都不太明白為何 2147483647 + 2 不是 = -2147483648 可能他用二個寄存器的原因吧?
我自己都不太肯定, 只是我的理解, 不想誤人子弟
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-21 19:09:35 | 显示全部楼层
xypmyp 发表于 2018-6-21 19:02
其實我都不太明白為何 2147483647 + 2 不是 = -2147483648  可能他用二個寄存器的原因吧?
我自 ...

1.png

2147483647 是 int 类型
2 是 int 类型

int 类型 + int 类型 = int 类型

评分

参与人数 1荣誉 +1 贡献 +1 收起 理由
xypmyp + 1 + 1 學習

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-21 19:11:49 | 显示全部楼层
xypmyp 发表于 2018-6-21 19:02
其實我都不太明白為何 2147483647 + 2 不是 = -2147483648  可能他用二個寄存器的原因吧?
我自 ...

2.png

2147483647LL 是 __int64 类型

__int64 类型 + int 类型 = __int64 类型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-21 19:15:32 | 显示全部楼层
xypmyp 发表于 2018-6-21 19:02
其實我都不太明白為何 2147483647 + 2 不是 = -2147483648  可能他用二個寄存器的原因吧?
我自 ...

int 类型 + int 类型 = int 类型

3.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-21 19:16:48 | 显示全部楼层
xypmyp 发表于 2018-6-21 19:02
其實我都不太明白為何 2147483647 + 2 不是 = -2147483648  可能他用二個寄存器的原因吧?
我自 ...

4.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 13:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表