BigInteger.OnesComplement Operator

Microsoft Silverlight will reach end of support after October 2021. Learn more.

Returns the bitwise one's complement of a BigInteger value.

Namespace:  System.Numerics
Assembly:  System.Numerics (in System.Numerics.dll)

Syntax

'Declaration
Public Shared Operator ~ ( _
    value As BigInteger _
) As BigInteger
public static BigInteger operator ~(
    BigInteger value
)

Parameters

Return Value

Type: System.Numerics.BigInteger
The bitwise one's complement of value.

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:

Imports System.Numerics

Module Example
   Public Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock)
      Dim value, complement As BigInteger

      value = BigInteger.Multiply(BigInteger.One, 9)
      complement = Not value

      outputBlock.Text &= String.Format("{0,5} -- {1,-32}", value, DisplayInBinary(value)) & vbCrLf
      outputBlock.Text &= String.Format("{0,5} -- {1,-32}", complement, DisplayInBinary(complement)) & vbCrLf
      outputBlock.Text &= vbCrLf

      value = BigInteger.MinusOne * SByte.MaxValue
      complement = BigInteger.op_OnesComplement(value)

      outputBlock.Text &= String.Format("{0,5} -- {1,-32}", value, DisplayInBinary(value)) & vbCrLf
      outputBlock.Text &= String.Format("{0,5} -- {1,-32}", complement, DisplayInBinary(complement)) & vbCrLf
      outputBlock.Text &= vbCrLf
   End Sub

   Private Function DisplayInBinary(ByVal 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
using System;
using System.Numerics;

public class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      BigInteger value, complement;

      value = BigInteger.Multiply(BigInteger.One, 9);
      complement = ~value;

      outputBlock.Text += String.Format("{0,5} -- {1,-32}\n", value, DisplayInBinary(value));
      outputBlock.Text += String.Format("{0,5} -- {1,-32}\n", complement, DisplayInBinary(complement));

      value = BigInteger.MinusOne * SByte.MaxValue;
      complement = ~value;

      outputBlock.Text += String.Format("{0,5} -- {1,-32}\n", value, DisplayInBinary(value));
      outputBlock.Text += String.Format("{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

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 Demo(ByVal outputBlock As System.Windows.Controls.TextBlock)
      Dim value, complement As bigInteger

      value = BigInteger.Multiply(BigInteger.One, 9)
      complement = BigInteger.op_OnesComplement(value)

      outputBlock.Text &= String.Format("{0,5} -- {1,-32}", value, DisplayInBinary(value)) & vbCrLf
      outputBlock.Text &= String.Format("{0,5} -- {1,-32}", complement, DisplayInBinary(complement)) & vbCrLf
      outputBlock.Text &= vbCrLf

      value = BigInteger.MinusOne * SByte.MaxValue
      complement = BigInteger.op_OnesComplement(value)

      outputBlock.Text &= String.Format("{0,5} -- {1,-32}", value, DisplayInBinary(value)) & vbCrLf
      outputBlock.Text &= String.Format("{0,5} -- {1,-32}", complement, DisplayInBinary(complement)) & vbCrLf
      outputBlock.Text &= vbCrLf
   End Sub

   Private Function DisplayInBinary(ByVal 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

Version Information

Silverlight

Supported in: 5, 4

Platforms

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.