【发布时间】:2014-09-14 01:52:49
【问题描述】:
所以我一直理解强制转换意味着获取某事物的二进制文件,并将其解释为被强制转换的实体(必要时截断)。但是我注意到在 C# 中,您可以采用双精度,这是一种 64 位表示,包括指数和值。您可以将其转换为 long,它是不带指数的整数的 64 位表示。因此,在我看来,如果你将一个随机十进制值(比如 10.43245)存储在一个 double 中,并将其转换为 long,你会得到一些随机数,它恰好是二进制结果的 long .但是,这不是发生的情况,您只需得到截断的小数和 10 的值。
我对强制转换的定义是错误的吗?或者 c# 是否在这里稍微改变了一些规则,以便为程序员提供更多他们可能对这种演员的期望(我也假设 java 可能也这样做,那么 c++ 呢?)
【问题讨论】:
-
是的,你对强制转换的定义是错误的。在 C++ 中,10.43245 也会被强制转换为 10。
-
C++ 是说明性的,因为您有各种类型的演员来涵盖不同的场景。
reinterpret_cast<>表示保留位,但static_cast表示应用适当的转换。正确答案见:stackoverflow.com/questions/332030/…
标签: c# casting double long-integer