Csharp/C Sharp/Language Basics/Operator bitwise

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

A class that displays the binary representation of a value

<source lang="csharp"> /* C# A Beginner"s Guide By Schildt Publisher: Osborne McGraw-Hill ISBN: 0072133295

  • /

/*

  Project 5-3 

  A class that displays the binary representation of a value. 
  • /

using System;

class ShowBits {

 public int numbits; 

 public ShowBits(int n) { 
   numbits = n; 
 } 

 public void show(ulong val) { 
   ulong mask = 1; 

   // left-shift a 1 into the proper position 
   mask <<= numbits-1; 

   int spacer = 0; 
   for(; mask != 0; mask >>= 1) { 
     if((val & mask) != 0) Console.Write("1"); 
     else Console.Write("0"); 
     spacer++; 
     if((spacer % 8) == 0) { 
       Console.Write(" "); 
       spacer = 0; 
     } 
   } 
   Console.WriteLine(); 
 } 

}

// Demonstrate ShowBits. public class ShowBitsDemo {

 public static void Main() { 
   ShowBits b = new ShowBits(8); 
   ShowBits i = new ShowBits(32); 
   ShowBits li = new ShowBits(64); 

   Console.WriteLine("123 in binary: "); 
   b.show(123); 

   Console.WriteLine("\n87987 in binary: "); 
   i.show(87987); 

   Console.WriteLine("\n237658768 in binary: "); 
   li.show(237658768); 


   // you can also show low-order bits of any integer 
   Console.WriteLine("\nLow order 8 bits of 87987 in binary: "); 
   b.show(87987);  
 } 

}


      </source>


Bit and, or, xor, not operator

<source lang="csharp"> using System; class LogOpsApp {

   public static void display(byte left, byte right, byte ans, string op) {
       string Lstr = null;
       string Rstr = null;
       string Astr = null;
       Lstr = Convert.ToString(left, 2);
       if (0 != right)
           Rstr = Convert.ToString(right, 2);
       else
           Rstr = "--------";
       Astr = Convert.ToString(ans, 2);
  
       Console.WriteLine("\t{0,8}\n{1}\t{2,8}\n\t{3,8}\n",Lstr, op, Rstr, Astr);
   }
  
   static void Main(string[] args)
   {
       byte a, b, c, d, e, f, g;
       a = 255;
       b = 132;
       c = 85;
       byte OneOperand = 0;
  
       d = (byte)(a & b);
       display (a, b, d, "&");
       e = (byte)(d | c);
       display (d, c, e, "|");
       f = (byte)(e ^ a);
       display (e, a, f, "^");
       g = (byte)~f;
       display (f, OneOperand, g, "~");
   }

}

</source>


Bit move operator

<source lang="csharp"> using System; class Operators {

   static void Main() {
       int a = 256, b = 128, c, d;
       c = a >> 1;
       d = b << 1;
       Console.WriteLine("{0}", c); //128
       Console.WriteLine("{0}", d); //256
   }

}

</source>


Bit operator

<source lang="csharp"> using System; class Operators {

   static void Main() {
       int a = 10, b = 15, c = 20, d, e, h, i;
       bool f, g, j = (a == b), k;
       d = (a & b);
       e = (a | b);
       f = (j && (b == c));
       g = (j || (b == c));
       h = (a ^ b);
       i = ~b;
       k = !j;
       Console.WriteLine("{0}", d); //10
       Console.WriteLine("{0}", e); //15
       Console.WriteLine("{0}", f); //False
       Console.WriteLine("{0}", g); //False
       Console.WriteLine("{0}", h); //5
       Console.WriteLine("{0}", i); //-16
       Console.WriteLine("{0}", j); //False
       Console.WriteLine("{0}", k); //True
   }

}

</source>


Bit Operators: move

<source lang="csharp">

using System; class MainClass {

   static void Main(string[] args)
   {
       int i = 1;
       for (int j = 0; j < 8; j++)
       {
           Console.WriteLine(
               "{0} << {1} = {2}", i, j, i << j);
       }
   }

}

</source>


Bit Shift operator

<source lang="csharp"> using System; class CompoundBitOpsApp {

   static void Main(string[] args)
   {
       for (byte j = 0; j < 8; j++)
       {
           byte k = 1;
           Console.WriteLine(
               "1 <<= {0,3} ({1}) = {2,8} ({3,3})",
               Convert.ToString(j, 2), j,
               Convert.ToString((k <<= j), 2), k);
       }
   }

}

</source>


Bitwise operation

<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794

  • /

namespace nsBitwise {

   using System;
   public class Bitwise345
   {
       static public void Main ()
       {
           char ch = "a";
           char toggle = (char) 0x20;
           for (int x = 0; x < 4; ++x)
           {
               Console.WriteLine ("In iteration {0}, ch = {1}",
                                  x + 1, (char) ch);
               ch = (char) (ch ^ toggle);
           }
       }
   }

}


      </source>


Bitwise Operators 2

<source lang="csharp"> /*

* C# Programmers Pocket Consultant
* Author: Gregory S. MacBeth
* Email: gmacbeth@comporium.net
* Create Date: June 27, 2003
* Last Modified Date:
*/

using System; namespace Client.Chapter_2___Operators_and_Excpressions {

 public class BitwiseOperators
 {
   static void Main(string[] args)
   {
     long MyBit = 0x1;
     long MyBitResult = 0;
     MyBitResult = MyBit & 0x1;
     MyBitResult = MyBit | 0x2;
     MyBitResult = MyBit ^ 0x4;
   }
 }

}

      </source>


Demonstrate the bitwise NOT

<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852

  • /

// Demonstrate the bitwise NOT. using System;

public class NotDemo {

 public static void Main() { 
   sbyte b = -34; 
   int t; 

   for(t=128; t > 0; t = t/2) { 
     if((b & t) != 0) Console.Write("1 ");  
     if((b & t) == 0) Console.Write("0 ");  
   } 
   Console.WriteLine(); 

   // reverse all bits 
   b = (sbyte) ~b; 

   for(t=128; t > 0; t = t/2) { 
     if((b & t) != 0) Console.Write("1 ");  
     if((b & t) == 0) Console.Write("0 ");  
   } 
 } 

}


      </source>


Demonstrate the shift operators

<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852

  • /

// Demonstrate the shift << and >> operators. using System;

public class ShiftDemo {

 public static void Main() { 
   int val = 1; 
   int t; 
   int i; 

   for(i = 0; i < 8; i++) {  
     for(t=128; t > 0; t = t/2) { 
       if((val & t) != 0) Console.Write("1 ");  
       if((val & t) == 0) Console.Write("0 ");  
     } 
     Console.WriteLine(); 
     val = val << 1; // left shift 
   } 
   Console.WriteLine(); 

   val = 128; 
   for(i = 0; i < 8; i++) {  
     for(t=128; t > 0; t = t/2) { 
       if((val & t) != 0) Console.Write("1 ");  
       if((val & t) == 0) Console.Write("0 ");  
     } 
     Console.WriteLine(); 
     val = val >> 1; // right shift 
   } 
 } 

}

      </source>


Display the bits within a byte

<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852

  • /

// Display the bits within a byte. using System;

public class ShowBits {

 public static void Main() { 
   int t; 
   byte val;  
 
   val = 123; 
   for(t=128; t > 0; t = t/2) { 
     if((val & t) != 0) Console.Write("1 ");  
     if((val & t) == 0) Console.Write("0 ");  
   } 
 } 

}


      </source>


Shift Operators 2

<source lang="csharp"> /*

* C# Programmers Pocket Consultant
* Author: Gregory S. MacBeth
* Email: gmacbeth@comporium.net
* Create Date: June 27, 2003
* Last Modified Date:
*/

using System; namespace Client.Chapter_2___Operators_and_Excpressions {

 public class ShiftOperators
 {
   static void Main(string[] args)
   {
     uint a = 0;
     uint b = 0;
     a = 8 << 3;
     b = 32 >> 4;
   }
 }

}

      </source>


Show bits

<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794

  • /

namespace nsBitwise {

   using System;
   public class Bitwise123
   {
       static public void Main ()
       {
           ushort x = 15542;
           ushort y = 21845;
           Console.Write ("x = {0} = ", x);
           ShowBits (x);
           Console.Write ("\r\ny = {0} = ", y);
           ShowBits (y);
           ushort result = (ushort) (x & y);
           Console.Write ("\r\nx & y     = ");
           ShowBits (result);
           Console.WriteLine (" = " + result);
           Console.Write ("\r\nx = {0} = ", x);
           ShowBits (x);
           Console.Write ("\r\ny = {0} = ", y);
           ShowBits (y);
           result = (ushort) (x | y);
           Console.Write ("\r\nx | y     = ");
           ShowBits (result);
           Console.WriteLine (" = " + result);
           Console.Write ("\r\nx = {0} = ", x);
           ShowBits (x);
           Console.Write ("\r\ny = {0} = ", y);
           ShowBits (y);
           result = (ushort) (x ^ y);
           Console.Write ("\r\nx ^ y     = ");
           ShowBits (result);
           Console.WriteLine (" = " + result);
       }
       static void ShowBits (ushort x)
       {
           int size;
           unsafe
           {
               size = sizeof (short) * 8;
           }
           for (int i = size - 1; i >= 0; --i)
           {
               Console.Write ((x >> i) & 1);
               if ((i % 4) == 0)
                   Console.Write (" ");
           }
       }
   }

}

      </source>


Use bitwise AND to determine if a number is odd

<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852

  • /

// Use bitwise AND to determine if a number is odd. using System;

public class IsOdd {

 public static void Main() { 
   ushort num;  

   num = 10; 

   if((num & 1) == 1) 
     Console.WriteLine("This won"t display."); 

   num = 11; 

   if((num & 1) == 1) 
     Console.WriteLine(num + " is odd."); 

 } 

}

      </source>


Use bitwise AND to make a number even

<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852

  • /

// Use bitwise AND to make a number even. using System;

public class MakeEven {

 public static void Main() { 
   ushort num;  
   ushort i;     

   for(i = 1; i <= 10; i++) { 
     num = i; 

     Console.WriteLine("num: " + num); 

     num = (ushort) (num & 0xFFFE); // num & 1111 1110 

     Console.WriteLine("num after turning off bit zero: " 
                       +  num + "\n");  
   } 
 } 

}


      </source>


Use bitwise OR to make a number odd

<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852

  • /

// Use bitwise OR to make a number odd. using System;

public class MakeOdd {

 public static void Main() { 
   ushort num;  
   ushort i;     

   for(i = 1; i <= 10; i++) { 
     num = i; 

     Console.WriteLine("num: " + num); 

     num = (ushort) (num | 1); // num | 0000 0001 

     Console.WriteLine("num after turning on bit zero: " 
                       +  num + "\n");  
   } 
 } 

}

      </source>


Use the shift operators to multiply and divide by 2

<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852

  • /

// Use the shift operators to multiply and divide by 2. using System;

public class MultDiv {

 public static void Main() { 
   int n; 

   n = 10; 

   Console.WriteLine("Value of n: " + n); 

   // multiply by 2 
   n = n << 1; 
   Console.WriteLine("Value of n after n = n * 2: " + n); 

   // multiply by 4 
   n = n << 2; 
   Console.WriteLine("Value of n after n = n * 4: " + n); 

   // divide by 2 
   n = n >> 1; 
   Console.WriteLine("Value of n after n = n / 2: " + n); 

   // divide by 4 
   n = n >> 2; 
   Console.WriteLine("Value of n after n = n / 4: " + n); 
   Console.WriteLine(); 

   // reset n 
   n = 10; 
   Console.WriteLine("Value of n: " + n); 

   // multiply by 2, 30 times 
   n = n << 30; // data is lost 
   Console.WriteLine("Value of n after left-shifting 30 places: " + n); 

 } 

}

      </source>


Use XOR to encode and decode a message

<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852

  • /

// Use XOR to encode and decode a message.

using System;

public class Encode {

 public static void Main() { 
   char ch1 = "H"; 
   char ch2 = "i"; 
   char ch3 = "!"; 

   int key = 88; 

   Console.WriteLine("Original message: " + 
                     ch1 + ch2 + ch3); 

   // encode the message 
   ch1 = (char) (ch1 ^ key); 
   ch2 = (char) (ch2 ^ key); 
   ch3 = (char) (ch3 ^ key); 

   Console.WriteLine("Encoded message: " +  
                     ch1 + ch2 + ch3); 

   // decode the message 
   ch1 = (char) (ch1 ^ key); 
   ch2 = (char) (ch2 ^ key); 
   ch3 = (char) (ch3 ^ key); 
   
   Console.WriteLine("Decoded message: " + 
                     ch1 + ch2 + ch3); 
 } 

}

      </source>