C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Right shift operator:
>>
Left shift operator:
<<
Next: Dividing by 2 is equivalent (in this case) to shifting right one place. Dividing by 4 is equivalent to shifting right two places.
So: The input number 5000 is divided by two to result in 2500, and divided by four to result in 1250.
C# program that divides by powers of two and shifts
using System;
class Program
{
static void Main()
{
// This program uses division by powers of two and shifts.
// ... It shows how dividing by powers of two can be done by shifting right.
// ... The input value is determined at runtime.
int value = int.Parse("5000");
int value1div = value / 2;
int value1shift = value >> 1;
Console.WriteLine(value1div);
Console.WriteLine(value1shift);
int value2div = value / 4;
int value2shift = value >> 2;
Console.WriteLine(value2div);
Console.WriteLine(value2shift);
}
}
Output
2500
2500
1250
1250
Result: The shift right operator was measurably faster, requiring 0.8 nanoseconds versus the 0.95 nanoseconds for the division.
Note: The static variable store instruction (stsfld) is part of this. More information on this instruction is available.
IL: stsfldC# program that benchmarks division by four
using System;
using System.Diagnostics;
class Program
{
static int _temp;
const int _max = int.MaxValue;
static void Main()
{
// This program shows using a right shift to divide by 4.
// ... It benchmarks this and then regular division.
var s1 = Stopwatch.StartNew();
for (int i = 0; i < _max; i++)
{
_temp = i >> 2;
}
s1.Stop();
var s2 = Stopwatch.StartNew();
for (int i = 0; i < _max; i++)
{
_temp = i / 4;
}
s2.Stop();
Console.WriteLine("{0:0.00} ns", ((s1.Elapsed.TotalMilliseconds * 1000000) /
(double)_max));
Console.WriteLine("{0:0.00} ns", ((s2.Elapsed.TotalMilliseconds * 1000000) /
(double)_max));
Console.Read();
}
}
Output
0.80 ns
0.95 ns
Also: The second program's execution showed that using the shift right operator is faster than using the division operator.