Teilen über


BigInteger.OnesComplement(BigInteger) Operator

Definition

Gibt das bitweise Einerkomplement eines BigInteger-Werts zurück.

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.BigInteger
Public Shared Operator Not (value As BigInteger) As BigInteger

Parameter

value
BigInteger

Ein Ganzzahlwert.

Gibt zurück

Das bitweise Einerkomplement von value.

Implementiert

Hinweise

Die OnesComplement -Methode definiert die Operation des bitweisen Komplementoperators für BigInteger Werte. Der bitweise Komplementoperator kehrt jedes Bit in einem numerischen Wert um. Das heißt, Bits in value , die 0 sind, werden im Ergebnis auf 1 festgelegt, und Bits, die 1 sind, werden im Ergebnis auf 0 festgelegt. Die OnesComplement -Methode aktiviert Code wie den folgenden:

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

Sprachen, die keine benutzerdefinierten Operatoren unterstützen, können die OnesComplement -Methode möglicherweise direkt aufrufen, um einen bitweisen Komplementvorgang auszuführen. Beispiel:

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

Gilt für: