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.

Другие вопросы по тегам