首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET decimal.Negate与乘以-1

.NET decimal.Negate与乘以-1
EN

Stack Overflow用户
提问于 2010-08-05 14:15:49
回答 4查看 2.2K关注 0票数 10

decimal.Negate(myDecimal)myDecimal * -1之间有什么区别吗(除了可读性)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-05 14:24:26

我怀疑Negate的存在是因为有一个一元减号运算符(op_UnaryNegation),最好使用表示等效功能的方法,这样不支持运算符重载的语言仍然可以实现相同的结果。

因此,与其将其与myDecimal * -1进行比较,不如将其视为编写-myDecimal的另一种方式。

(我相信它也经过了优化--考虑到浮点数的工作方式,求反值要比普通乘法简单得多;只是有一点需要翻转。不需要执行任何实际的算术。)

票数 18
EN

Stack Overflow用户

发布于 2010-08-05 14:33:35

如果您使用.NET反射器查看.NET源代码,您将看到以下内容:(在它最终打开之前一直在喝咖啡。)

代码语言:javascript
复制
public static decimal Negate(decimal d)
{
    return new decimal(d.lo, d.mid, d.hi, d.flags ^ -2147483648);
}

由于decimal内部的工作方式,这看起来是一种奇特的方式来表示-1。

如果你这样做*-1,它会将它映射到下面的调用:

代码语言:javascript
复制
FCallMultiply(ref result, yourNumber, -1M);

这可能会产生不同的IL代码。

票数 7
EN

Stack Overflow用户

发布于 2010-08-05 14:22:39

就我个人而言,我发现-myDecimal的可读性比这两种语言中的任何一种都要好(我不是数学极客,但我非常确定这三种语言是等同的),但话又说回来,我通常更喜欢紧凑表示法。

如果是这样的话,我会使用Negate,因为我喜欢避免在我的代码中漂浮着幻数,虽然使用的-1并不是真正的幻数,但乍一看它肯定是一个幻数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3412190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档