假设我有一个这样的UInt128

UInt64 upperA = 7, lowerA = 8;
UInt128 foo = new(upperA, lowerA);
++foo;

现在我要从更新后的foo中提取两个UInt64.
如果它们是财产,我可以这么做

UInt64 upperB = foo.Upper, lowerB = foo.Lower;

但它们不是,那么我怎么才能得到它们呢?

推荐答案

通过转换为UInt64,您已经可以获得较低的位;要获得较高的位,您可以首先应用位移位:

var lower = (UInt64)foo;
var upper = (UInt64)(foo >> 64);

Csharp相关问答推荐

EF Core Fluent API中定义的多对多关系

处理. netstandard2.0项目中HttpClient.SslProtocol的PlatformNotSupportedException问题""

ASP.NET Core 8.0 JWT验证问题:尽管令牌有效,但SecurityTokenNoExpirationError异常

在EF Core中,有没有什么方法可以防止在查询中写入相同的条件,而代之以表达式?

更改执行目录

Automapper 12.x将GUID映射到字符串

如果设置了另一个属性,则Newtonsoft JSON忽略属性

当试图限制EF Select 的列时,如何避免重复代码?

如何在C#中正确类型化带有泛型的嵌套类

如何在Polly重试策略成功之前将HttpClient请求排队?

从MudAutoComplete打开对话框,列表仍然可见

无法向Unity注册Microsoft Logger

C#;AvaloniaUI;MVVM;当另一个窗口上的按钮被单击时,如何更新视图图像源?

有没有更好的方法来使用LINQ获取整行的计算组

将带有嵌套If-Else的Foreach循环转换为Linq表达式

无法通过服务控制台启动.NET Core 6.0服务(错误1053)

如何在C#Visual Studio IF语句中删除换行符

需要帮助才能在图片框中显示C#(WinForm)中纯资源DLL中的图像

C#二进制PowerShell模块类型转换

为什么LoadLibrary无法加载由vcpkg构建的OpenCV_world DLL,而不是预构建的二进制版本?