/*
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 ("
y = {0} = ", y);
ShowBits (y);
ushort result = (ushort) (x & y);
Console.Write ("
x & y = ");
ShowBits (result);
Console.WriteLine (" = " + result);
Console.Write ("
x = {0} = ", x);
ShowBits (x);
Console.Write ("
y = {0} = ", y);
ShowBits (y);
result = (ushort) (x | y);
Console.Write ("
x | y = ");
ShowBits (result);
Console.WriteLine (" = " + result);
Console.Write ("
x = {0} = ", x);
ShowBits (x);
Console.Write ("
y = {0} = ", y);
ShowBits (y);
result = (ushort) (x ^ y);
Console.Write ("
x ^ 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 (' ');
}
}
}
}
Language Basics
Bitwise operation
/*
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);
}
}
}
}
[/csharp]
Use the shift operators to multiply and divide by 2
/*
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);
}
}
[/csharp]
Demonstrate the shift operators
/*
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
}
}
}
Demonstrate the bitwise NOT
/*
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 ");
}
}
}
Use XOR to encode and decode a message
/*
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);
}
}
Use bitwise OR to make a number odd
/*
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 + " "); } } } [/csharp]