BigInteger.OnesComplement(BigInteger) Operator   
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Returns the bitwise one's complement of a BigInteger value.
public:
 static System::Numerics::BigInteger operator ~(System::Numerics::BigInteger value);public:
 static System::Numerics::BigInteger operator ~(System::Numerics::BigInteger value) = System::Numerics::IBitwiseOperators<System::Numerics::BigInteger, System::Numerics::BigInteger, System::Numerics::BigInteger>::op_OnesComplement;public static System.Numerics.BigInteger operator ~(System.Numerics.BigInteger value);static member op_OnesComplement : System.Numerics.BigInteger -> System.Numerics.BigIntegerPublic Shared Operator Not (value As BigInteger) As BigIntegerParameters
- value
- BigInteger
An integer value.
Returns
The bitwise one's complement of value.
Implements
Remarks
The OnesComplement method defines the operation of the bitwise one's complement operator for BigInteger values. The bitwise one's complement operator reverses each bit in a numeric value. That is, bits in value that are 0 are set to 1 in the result, and bits that are 1 are set to 0 in the result. The OnesComplement method enables code such as the following:
using System;
using System.Numerics;
public class Example
{
   public static void Main()
   {
      BigInteger value, complement;
      value = BigInteger.Multiply(BigInteger.One, 9);
      complement = ~value;
      Console.WriteLine("{0,5} -- {1,-32}", value, DisplayInBinary(value));
      Console.WriteLine("{0,5} -- {1,-32}\n", complement, DisplayInBinary(complement));
      value = BigInteger.MinusOne * SByte.MaxValue;
      complement = ~value;
      Console.WriteLine("{0,5} -- {1,-32}", value, DisplayInBinary(value));
      Console.WriteLine("{0,5} -- {1,-32}\n", complement, DisplayInBinary(complement));
   }
   private static string DisplayInBinary(BigInteger number)
   {
      byte[] bytes = number.ToByteArray();
      string binaryString = string.Empty;
      foreach (byte byteValue in bytes)
      {
         string byteString = Convert.ToString(byteValue, 2).Trim();
         binaryString += byteString.Insert(0, new string('0', 8 - byteString.Length));
      }
      return binaryString;
   }
}
// The example displays the following output:
//           9 -- 00001001
//         -10 -- 11110110
//
//        -127 -- 10000001
//         126 -- 01111110
open System
open System.Numerics
let displayInBinary (number: bigint) =
    let bytes = number.ToByteArray()
    let mutable binaryString = ""
    for byteValue in bytes do
        let byteString = Convert.ToString(byteValue, 2).Trim()
        binaryString <- binaryString + byteString.PadLeft(8, '0')
    binaryString
let value = BigInteger.Multiply(BigInteger.One, 9)
let complement = ~~~(int64 value) |> bigint
printfn "%5O -- %s" value (displayInBinary value)
printfn "%5O -- %s\n" complement (displayInBinary complement)
let value2 = BigInteger.MinusOne * (bigint SByte.MaxValue)
let complement2 = ~~~(int64 value) |> bigint
printfn "%5O -- %s" value2 (displayInBinary value2)
printfn "%5O -- %s" complement2 (displayInBinary complement2)
// The example displays the following output:
//           9 -- 00001001
//         -10 -- 11110110
//
//        -127 -- 10000001
//         126 -- 01111110
Imports System.Numerics
Module Example
   Public Sub Main()
      Dim value, complement As bigInteger
      
      value = BigInteger.Multiply(BigInteger.One, 9)
      complement = Not value
      
      Console.WriteLine("{0,5} -- {1,-32}", value, DisplayInBinary(value))
      Console.WriteLine("{0,5} -- {1,-32}", complement, DisplayInBinary(complement))
      Console.WriteLine()
   
      value = BigInteger.MinusOne * SByte.MaxValue
      complement = BigInteger.op_OnesComplement(value)
      
      Console.WriteLine("{0,5} -- {1,-32}", value, DisplayInBinary(value))
      Console.WriteLine("{0,5} -- {1,-32}", complement, DisplayInBinary(complement))
      Console.WriteLine()
   End Sub
   Private Function DisplayInBinary(number As BigInteger) As String
      Dim bytes() As Byte = number.ToByteArray()  
      Dim binaryString As String = String.Empty
      For Each byteValue As Byte In bytes
         Dim byteString As String = Convert.ToString(byteValue, 2).Trim()
         binaryString += byteString.Insert(0, New String("0"c, 8 - byteString.Length))
      Next
      Return binaryString    
   End Function
End Module
' The example displays the following output:
'           9 -- 00001001
'         -10 -- 11110110
'       
'        -127 -- 10000001
'         126 -- 01111110
Languages that do not support custom operators may be able to call the OnesComplement method directly to perform a bitwise one's complement operation. For example:
Imports System.Numerics
Module Example
   Public Sub Main()
      Dim value, complement As bigInteger
      
      value = BigInteger.Multiply(BigInteger.One, 9)
      complement = BigInteger.op_OnesComplement(value)
      
      Console.WriteLine("{0,5} -- {1,-32}", value, DisplayInBinary(value))
      Console.WriteLine("{0,5} -- {1,-32}", complement, DisplayInBinary(complement))
      Console.WriteLine()
   
      value = BigInteger.MinusOne * SByte.MaxValue
      complement = BigInteger.op_OnesComplement(value)
      
      Console.WriteLine("{0,5} -- {1,-32}", value, DisplayInBinary(value))
      Console.WriteLine("{0,5} -- {1,-32}", complement, DisplayInBinary(complement))
      Console.WriteLine()
   End Sub
   Private Function DisplayInBinary(number As BigInteger) As String
      Dim bytes() As Byte = number.ToByteArray()  
      Dim binaryString As String = String.Empty
      For Each byteValue As Byte In bytes
         Dim byteString As String = Convert.ToString(byteValue, 2).Trim()
         binaryString += byteString.Insert(0, New String("0"c, 8 - byteString.Length))
      Next
      Return binaryString    
   End Function
End Module
' The example displays the following output:
'           9 -- 00001001
'         -10 -- 11110110
'       
'        -127 -- 10000001
'         126 -- 01111110