我们在写程序时,总是会自觉或不自觉地频繁用到类型转换,比如将整数转换为浮点数或反之。
今天的题目主要讨论基本类型的转换(但和普通的类型转换有所不同哦,详见后文),考考你是否真的理解了类型转换的本质。在面向对象系统中还会涉及类和接口的类型转换,但它们和基本类型的转换还是有区别的,今天暂时不考虑。
(本人博客中所有题目都是我原创的,仅此一家,不买也来看看啊)
开始了,请听题。
题目很简单,自己编写一个模拟double到long的强制类型转换实现。即实现如下效果但不能使用语言提供的强制类型转换功能:
long a_long = (long) a_double;
考虑到语言之间的差异,下面分别说明一下题目的详细要求。
1. 喜欢C语言的看这里
请编写一个函数get_int_from_float,其原型如下:long get_int_from_double(double *)
该函数接受一个double指针类型的参数并返回其整数部分。
例如调用get_int_from_float(5.2),返回5。
注意,对于非常大的数,例如1.5E100,其实际的整数部分(实际上它就是一个整数)应该是15后面跟99个0这个数,但这个数太大,即使是long型也表示不了。此时不得不对结果进行截断(没办法,客观上被限制了)。
已知条件:各类型的长度确定,int和float都是32位,long和double都是64位。其他已知条件见后文。
要求:见后文
2. Java或C#版
请编写一个方法或函数: