using System.Threading.Tasks;
using System.Diagnostics;
const Int32 bits = 100_000_000;
Int32[] x = new Int32[n];
Int32[] y = new Int32[n];
Random random = new Random();
for (int i = 0; i < n; i++)
Stopwatch stopwatch = Stopwatch.StartNew();
for (int i = 0; i < n; i++) {
countOnes += Int32.PopCount( x[i] & y[i]);
stopwatch.Stop(); long elapsed = stopwatch.ElapsedMilliseconds;
foreach( var (a,b) in x.Zip(y) ) {
countOnesZip += Int32.PopCount( a & b);
stopwatch.Stop(); long elapsed_zip = stopwatch.ElapsedMilliseconds;
Interlocked.Add(ref countOnesPar, Int32.PopCount(x[i] & y[i]));
stopwatch.Stop(); long elapsed_par = stopwatch.ElapsedMilliseconds;
Console.WriteLine($"Processed {bits:N0} bits");
Console.WriteLine($"Elapsed time (For): {elapsed,13}ms Count: {countOnes:N0}");
Console.WriteLine($"Elapsed time (ForEach): {elapsed_zip,9}ms Count: {countOnesZip:N0}");
Console.WriteLine($"Elapsed time (Parallel.For): {elapsed_par,4}ms Count: {countOnesPar:N0}");