Csharp/C#教程:在C#中将位从ulong复制到long分享


在C#中将位从ulong复制到long

所以看起来.NET性能计数器类型有一个恼人的问题:它暴露了计数器RawValue的long ,而windows中的实际性能计数器值是无符号的,不能是负数。 例如,如果你有一个NumberOfItems64计数器API将非常乐意接受一个负值,然后静默地将其转换为一个非常大的数字。 实际上,对于计数器的值范围的一半,设置它的唯一方法是找到正确的负值传递!

我假设这里发生的事情是他们从long整数中获取原始位并将其视为无符号的64位数。 来自二进制补码的负值只是作为计数器的直接数字读取。

所以我试图弄清楚如何强制C#只是将ulong的位直接丢弃到long ,因为这就是API想要的。 但是C#在这里太有用了……你不能转换或使用Convert.ToInt64(ulong)因为它会因为值太大而抛出溢出exception。 我偶然发现了这种转换方式:

Convert.ToInt64(myULong.ToString("X"), 16)

当它从非基数10中的字符串转换时,它假定数字是二进制补码并且做我需要的数字。 但它并不理想,因为它需要为每次转换分配一个对象并解析一个字符串,这个API将对性能至关重要。 在C#中有更好的方法吗?

一个简单的演员喜欢

 ulong value1 = 0xFEDCBA9876543210UL; // 18364758544493064720 long value2 = (long)value1; // -81985529216486896 ulong value3 = (ulong)value2; // 18364758544493064720 

完全保留值中的位。

上述就是C#学习教程:在C#中将位从ulong复制到long分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/984961.html

(0)
上一篇 2021年12月20日
下一篇 2021年12月20日

精彩推荐