C# преобразование типов даты так же, как C++
Как мне конвертировать 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++'s long
часто это 32-битный тип данных. Похоже, в вашей системе не хватает бит для представления 3633091313
так что результат отрицательный. Это поведение не определено в C++ ( соответствующие вопросы и ответы).
В C# это соответствует преобразованию в int
:
UInt64 ul = 3633091313UL;
Int32 l = (int)ul;
Console.WriteLine(l); // prints -661875983
Demo.