当实参类型与函数的形参类型不一致时
当函数形参为int而传入double类型的参数时,为什么不是将double强制转换?而是输出了一个奇怪的值#include<iostream>
using namespace std;
void doubleToInt(int test){
cout<<"调用函数,传入double,参数为int,字节数为:"<<sizeof(test) << '\t' << test;
}
int main(){
int int_number;
double double_number;
cin >> int_number;
cin >> double_number;
cout << "int_number:" << int_number<<endl;
cout << "double_number:" << double_number<<endl;
cout << "调用函数前" << endl << "int_number位数:" << sizeof(int_number) << endl << "double_number位数:" << sizeof(double_number) << endl;
doubleToInt(double_number);
}
这和函数调用没有关系
如果 bit64 的值超过了 bit32,那么转换结果是 0x80000000
本帖最后由 程序员的救赎 于 2018-6-21 00:02 编辑
人造人 发表于 2018-6-20 23:52
你试下输入长度超出int范围的double类型数据 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.
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
void doubleToInt(int test) {
cout << "调用函数,传入double,参数为int,字节数为:" << sizeof(test) << '\t' << test;
std::getchar();
}
int main() {
int int_number;
double double_number;
int_number = 123456789;
double_number = 999999999;
cout << "int_number:" << int_number << endl;
cout << "double_number: " << setprecision(9) << double_number << endl;
cout << "double_number: " << fixed << double_number << endl;
cout << "double_number: " << showpoint << double_number << endl;
cout << "调用函数前" << endl << "int_number位数:" << sizeof(int_number) << endl << "double_number位数:" << sizeof(double_number) << endl;
doubleToInt(double_number);
std::getchar();
return 0;
}
我不是很明白这些英文描述
要我猜的话就是
超了 32位的范围,结果就是 80000000H
超了 64位的范围,结果就是 8000000000000000H
我看不懂这个
向你学习! 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 ...
你理解错我的问题了,不是那个科学计数法的问题。。。 程序员的救赎 发表于 2018-6-21 12:58
你理解错我的问题了,不是那个科学计数法的问题。。。
sorry 看錯了, 1e+09 看起來挺奇怪, 不好意思{:5_93:}
引用"人造人"
(我不是很明白这些英文描述
要我猜的话就是
超了 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 xypmyp 发表于 2018-6-21 18:03
sorry 看錯了, 1e+09 看起來挺奇怪, 不好意思
引用"人造人"
2147483647 + 2 = 2147483649 = 0x80000001
1>c:\visualstudioprojects\c++\c++\main.cpp(14): warning C4307: “+”: 整型常量溢出 人造人 发表于 2018-6-21 18:22
2147483647 + 2 = 2147483649 = 0x80000001
其實我都不太明白為何 2147483647 + 2 不是 = -2147483648 {:5_94:} 可能他用二個寄存器的原因吧?
我自己都不太肯定, 只是我的理解, 不想誤人子弟 xypmyp 发表于 2018-6-21 19:02
其實我都不太明白為何 2147483647 + 2 不是 = -2147483648可能他用二個寄存器的原因吧?
我自 ...
2147483647 是 int 类型
2 是 int 类型
int 类型 + int 类型 = int 类型
xypmyp 发表于 2018-6-21 19:02
其實我都不太明白為何 2147483647 + 2 不是 = -2147483648可能他用二個寄存器的原因吧?
我自 ...
2147483647LL 是 __int64 类型
__int64 类型 + int 类型 = __int64 类型
xypmyp 发表于 2018-6-21 19:02
其實我都不太明白為何 2147483647 + 2 不是 = -2147483648可能他用二個寄存器的原因吧?
我自 ...
int 类型 + int 类型 = int 类型
xypmyp 发表于 2018-6-21 19:02
其實我都不太明白為何 2147483647 + 2 不是 = -2147483648可能他用二個寄存器的原因吧?
我自 ...
页:
[1]