为什么不同导致相同的操作? PHP e C#

时间:2017-02-14 21:55:29

标签: c# php math

我在PHP中有以下操作:

24733 * 0x41c64e6d + 0x6073;

...结果是:27293242579276

使用相同的逻辑,我在C#中执行相同的操作:

24733 * 0x41c64e6d + 0x6073;

但结果是:-1274586804

OMG,为什么?

2 个答案:

答案 0 :(得分:2)

默认情况下,当未指定显式强制转换时,c#将数字视为int

所以将24733视为int。

int x int + int = int

和Max int是2147483647,它小于27293242579276.这导致整数溢出。

要解决此问题,请使用位数较高的类型,例如decimal

你可以在数字的末尾附加一个字母“m”告诉c#你希望它是decimal 比如24733m * 0x41c64e6d + 0x6073

答案 1 :(得分:0)

在PHP中,这是正在发生的事情

var_dump

您可以通过执行budgetLineId

来查看此内容

在64位版本中,最大整数为9223372036854775807.因此,PHP可以支持27293242579276提供的答案。基于另一个答案,看起来C#只是以不同方式转换数字,并且可能使用较低的最大整数。 / p>