C#日期类型转换与C++相同

4

我可以帮您进行翻译。需要将ulong转换为long并获得与C++中相同的结果。

C++

unsigned long ul = 3633091313;
long l = (long)ul;
l is -661875983

C#

ulong ul = 3633091313;
long l = (long)ul;
l is 3633091313

1
你想要一个溢出错误吗?因为C++示例就是一个错误。.NET Long是一个64位有符号整数。所以最大值是9,223,372,036,854,775,807(https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/long)。与本地的C++ Long只有32位相比。 - Christopher
1个回答

8

C++中的long通常是32位数据类型。在您的系统中,它似乎没有足够的位来表示3633091313,因此结果为负数。这种行为在C ++中未定义 (相关问答)。

在C#中,这相当于转换为int

UInt64 ul = 3633091313UL;
Int32 l = (int)ul;
Console.WriteLine(l); // prints -661875983

演示。


1
也许我们应该在这里使用int[binarity],而不是类型别名"int"和"ulong"?类型在内存中的宽度似乎是一个重要特性。由于某种奇怪的原因。 - Christopher
@Christopher 你说得对,显示正确的大小更具描述性。谢谢! - Sergey Kalinichenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接