BigInteger.LeftShift Operator

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

Shifts a BigInteger value a specified number of bits to the left.

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

Syntax

'Declaration
Public Shared Operator << ( _
    value As BigInteger, _
    shift As Integer _
) As BigInteger
public static BigInteger operator <<(
    BigInteger value,
    int shift
)

Parameters

  • shift
    Type: System.Int32
    The number of bits to shift value to the left.

Return Value

Type: System.Numerics.BigInteger
A value that has been shifted to the left by the specified number of bits.

Remarks

The LeftShift method defines the operation of the bitwise left-shift operator for BigInteger values. It enables code such as the following:

Dim number As BigInteger = BigInteger.MinusOne * BigInteger.Multiply(UInt64.MaxValue, 490456290) + 17478743027342903705ul
outputBlock.Text += String.Format("Shifting {0} left by:", number) & vbCrLf
For ctr As Integer = 0 To 16
   Dim newNumber As BigInteger = number << ctr
   outputBlock.Text += String.Format(" {0,2} bits: {1,35} {2,30}", ctr, newNumber, newNumber.ToString("X")) & vbCrLf
Next
' The example displays the following output:
'    Shifting -9047321678449816249999312055 left by:
'      0 bits:       -9047321678449816249999312055       E2C43B1D0D6F07D2CC1FBB49
'      1 bits:      -18094643356899632499998624110       C588763A1ADE0FA5983F7692
'      2 bits:      -36189286713799264999997248220       8B10EC7435BC1F4B307EED24
'      3 bits:      -72378573427598529999994496440      F1621D8E86B783E9660FDDA48
'      4 bits: -1.4475714685519705999998899288E+29      E2C43B1D0D6F07D2CC1FBB490
'      5 bits: -2.8951429371039411999997798576E+29      C588763A1ADE0FA5983F76920
'      6 bits: -5.7902858742078823999995597152E+29      8B10EC7435BC1F4B307EED240
'      7 bits:  -1.158057174841576479999911943E+30     F1621D8E86B783E9660FDDA480
'      8 bits: -2.3161143496831529599998238861E+30     E2C43B1D0D6F07D2CC1FBB4900
'      9 bits: -4.6322286993663059199996477722E+30     C588763A1ADE0FA5983F769200
'     10 bits: -9.2644573987326118399992955443E+30     8B10EC7435BC1F4B307EED2400
'     11 bits: -1.8528914797465223679998591089E+31    F1621D8E86B783E9660FDDA4800
'     12 bits: -3.7057829594930447359997182177E+31    E2C43B1D0D6F07D2CC1FBB49000
'     13 bits: -7.4115659189860894719994364355E+31    C588763A1ADE0FA5983F7692000
'     14 bits: -1.4823131837972178943998872871E+32    8B10EC7435BC1F4B307EED24000
'     15 bits: -2.9646263675944357887997745742E+32   F1621D8E86B783E9660FDDA48000
'     16 bits: -5.9292527351888715775995491484E+32   E2C43B1D0D6F07D2CC1FBB490000      
BigInteger number = BigInteger.MinusOne * ((BigInteger) UInt64.MaxValue) * 490456290 + 17478743027342903705;
outputBlock.Text += String.Format("Shifting {0} left by:", number) + "\n";
for (int ctr = 0; ctr <= 16; ctr++)
{
   BigInteger newNumber = number << ctr;
   outputBlock.Text += String.Format(" {0,2} bits: {1,35} {2,30}",
                     ctr, newNumber, newNumber.ToString("X")) + "\n";
}
// The example displays the following output:
//    Shifting -9047321678449816249999312055 left by:
//      0 bits:       -9047321678449816249999312055       E2C43B1D0D6F07D2CC1FBB49
//      1 bits:      -18094643356899632499998624110       C588763A1ADE0FA5983F7692
//      2 bits:      -36189286713799264999997248220       8B10EC7435BC1F4B307EED24
//      3 bits:      -72378573427598529999994496440      F1621D8E86B783E9660FDDA48
//      4 bits: -1.4475714685519705999998899288E+29      E2C43B1D0D6F07D2CC1FBB490
//      5 bits: -2.8951429371039411999997798576E+29      C588763A1ADE0FA5983F76920
//      6 bits: -5.7902858742078823999995597152E+29      8B10EC7435BC1F4B307EED240
//      7 bits:  -1.158057174841576479999911943E+30     F1621D8E86B783E9660FDDA480
//      8 bits: -2.3161143496831529599998238861E+30     E2C43B1D0D6F07D2CC1FBB4900
//      9 bits: -4.6322286993663059199996477722E+30     C588763A1ADE0FA5983F769200
//     10 bits: -9.2644573987326118399992955443E+30     8B10EC7435BC1F4B307EED2400
//     11 bits: -1.8528914797465223679998591089E+31    F1621D8E86B783E9660FDDA4800
//     12 bits: -3.7057829594930447359997182177E+31    E2C43B1D0D6F07D2CC1FBB49000
//     13 bits: -7.4115659189860894719994364355E+31    C588763A1ADE0FA5983F7692000
//     14 bits: -1.4823131837972178943998872871E+32    8B10EC7435BC1F4B307EED24000
//     15 bits: -2.9646263675944357887997745742E+32   F1621D8E86B783E9660FDDA48000
//     16 bits: -5.9292527351888715775995491484E+32   E2C43B1D0D6F07D2CC1FBB490000      
NoteNote:

Unlike the bitwise left-shift operation with integer primitives, the LeftShift method preserves the sign of the original BigInteger value.

Languages that do not support custom operators can perform a bitwise left-shift operation by multiplying value by BigInteger.Pow(2,shift). The following example shows that the results are identical to the results of using this operator.

Dim number As BigInteger = BigInteger.MinusOne * BigInteger.Multiply(UInt64.MaxValue, 490456290) + 17478743027342903705ul
outputBlock.Text += String.Format("Shifting {0} left by:", number) & vbCrLf
For ctr As Integer = 0 To 16
   Dim newNumber As BigInteger = BigInteger.Multiply(number, BigInteger.Pow(2, ctr))
   outputBlock.Text += String.Format(" {0,2} bits: {1,35} {2,30}",  
                     ctr, newNumber, newNumber.ToString("X")) + vbCrLf
Next
' The example displays the following output:
'    Shifting -9047321678449816249999312055 left by:
'      0 bits:       -9047321678449816249999312055       E2C43B1D0D6F07D2CC1FBB49
'      1 bits:      -18094643356899632499998624110       C588763A1ADE0FA5983F7692
'      2 bits:      -36189286713799264999997248220       8B10EC7435BC1F4B307EED24
'      3 bits:      -72378573427598529999994496440      F1621D8E86B783E9660FDDA48
'      4 bits: -1.4475714685519705999998899288E+29      E2C43B1D0D6F07D2CC1FBB490
'      5 bits: -2.8951429371039411999997798576E+29      C588763A1ADE0FA5983F76920
'      6 bits: -5.7902858742078823999995597152E+29      8B10EC7435BC1F4B307EED240
'      7 bits:  -1.158057174841576479999911943E+30     F1621D8E86B783E9660FDDA480
'      8 bits: -2.3161143496831529599998238861E+30     E2C43B1D0D6F07D2CC1FBB4900
'      9 bits: -4.6322286993663059199996477722E+30     C588763A1ADE0FA5983F769200
'     10 bits: -9.2644573987326118399992955443E+30     8B10EC7435BC1F4B307EED2400
'     11 bits: -1.8528914797465223679998591089E+31    F1621D8E86B783E9660FDDA4800
'     12 bits: -3.7057829594930447359997182177E+31    E2C43B1D0D6F07D2CC1FBB49000
'     13 bits: -7.4115659189860894719994364355E+31    C588763A1ADE0FA5983F7692000
'     14 bits: -1.4823131837972178943998872871E+32    8B10EC7435BC1F4B307EED24000
'     15 bits: -2.9646263675944357887997745742E+32   F1621D8E86B783E9660FDDA48000
'     16 bits: -5.9292527351888715775995491484E+32   E2C43B1D0D6F07D2CC1FBB490000      
BigInteger number = BigInteger.MinusOne * ((BigInteger) UInt64.MaxValue) * 490456290 + 17478743027342903705;
outputBlock.Text += String.Format("Shifting {0} left by:", number) + "\n";
for (int ctr = 0; ctr <= 16; ctr++)
{
   BigInteger newNumber = BigInteger.Multiply(number, BigInteger.Pow(2, ctr));
   outputBlock.Text += String.Format(" {0,2} bits: {1,35} {2,30}",
                     ctr, newNumber, newNumber.ToString("X")) + "\n";
}
// The example displays the following output:
//    Shifting -9047321678449816249999312055 left by:
//      0 bits:       -9047321678449816249999312055       E2C43B1D0D6F07D2CC1FBB49
//      1 bits:      -18094643356899632499998624110       C588763A1ADE0FA5983F7692
//      2 bits:      -36189286713799264999997248220       8B10EC7435BC1F4B307EED24
//      3 bits:      -72378573427598529999994496440      F1621D8E86B783E9660FDDA48
//      4 bits: -1.4475714685519705999998899288E+29      E2C43B1D0D6F07D2CC1FBB490
//      5 bits: -2.8951429371039411999997798576E+29      C588763A1ADE0FA5983F76920
//      6 bits: -5.7902858742078823999995597152E+29      8B10EC7435BC1F4B307EED240
//      7 bits:  -1.158057174841576479999911943E+30     F1621D8E86B783E9660FDDA480
//      8 bits: -2.3161143496831529599998238861E+30     E2C43B1D0D6F07D2CC1FBB4900
//      9 bits: -4.6322286993663059199996477722E+30     C588763A1ADE0FA5983F769200
//     10 bits: -9.2644573987326118399992955443E+30     8B10EC7435BC1F4B307EED2400
//     11 bits: -1.8528914797465223679998591089E+31    F1621D8E86B783E9660FDDA4800
//     12 bits: -3.7057829594930447359997182177E+31    E2C43B1D0D6F07D2CC1FBB49000
//     13 bits: -7.4115659189860894719994364355E+31    C588763A1ADE0FA5983F7692000
//     14 bits: -1.4823131837972178943998872871E+32    8B10EC7435BC1F4B307EED24000
//     15 bits: -2.9646263675944357887997745742E+32   F1621D8E86B783E9660FDDA48000
//     16 bits: -5.9292527351888715775995491484E+32   E2C43B1D0D6F07D2CC1FBB490000      

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.