.net - 为什么 F# 中 bigint 缺少按位非运算符 (~~~)?

标签 .net f# operator-overloading biginteger

最近我在System.Numerics.BigInteger中发现了一个奇怪的现象。 type definition似乎缺乏理由 - 这种类型 does not support按位NOT运算符(F# 中的 ~~~)。 虽然 F# 中的其他整数类型允许执行位求反以及 .NET 生态系统中的整体,但 bigint类型缺少通讯员 ~~~运算符。

事实上bigint是底层硬件不直接支持的合成类型并不妨碍它支持其他按位运算符,即 <<< , >>> , ||| , ^^^ ,和&&&适应缺乏预设位宽度的情况。那么为什么~~~不能吗?

编辑:感谢Jeppe Stig Nielsen感谢指出我对 System.Numerics.BigInteger 的疏忽类型有 OnesComplement运算符(operator)准确执行 bitwise NOT , 的确。我已相应地纠正了原来的问题。这让我相信~~~ bigint 中被省略无意中使用了 F# 中的运算符。

最佳答案

我不知道这一定是原因,但是缺乏固定宽度意味着~~~不会满足它通常满足的一些良好特性。例如,应该~~~ 5I是?从逻辑上讲,这应该是 0x1111...1010 (带有无限的前缀)。显然我们需要在某个地方修剪这个前缀。如果我们保持结果与输入的位宽相同,那么我们会得到 010 = 2作为结果。但由于前导零并不重要,因此相同的逻辑表明 ~~~ 2I应该是1I 。但后来~~~ (~~~ 5I) <> 5I .

关于.net - 为什么 F# 中 bigint 缺少按位非运算符 (~~~)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16286160/

相关文章:

c# - 如何在列表和字典之间进行左连接?

f# - 无法从 F# 中查看 Excel Interop 中的某些属性

F#Seq.initInfinite给出StackOverflowException

c# - C# 中的 FSharpChoice

c++ - std::cout 的简约重新实现

C++: vector - "operator -"的不明确重载

.net - SqlCommand.Clone() 是创建深拷贝还是浅拷贝?

c# - 为什么 WPF 在我的案例中不选择正确的 DataTemplate?

c# - 使用 C# Microsoft.Azure.Management.Fluent 从 Azure 检索应用服务列表会导致 'this.Client.SubscriptionId' 不能为空

c++ - 对另一个类中的一个类使用重载运算符