Blue Theme Orange Theme Green Theme Red Theme
 
MindFusion's Components
Home | Forums | Videos | Photos | Blogs | E-Books | Interviews | Jobs | Beginners | Training
 | Consulting  
Submit an Article 
 Login Close
User Id:
Password:
 
Forgot Password
Forgot Username
Why Register
 Jump to
Skip Navigation Links
TechnologyExpand Technology
WebsiteExpand Website
New MS SQL 2008 Available - DiscountASP.NET
 Resources  
Close
 Our Network  
Close
Search :       Advanced Search »
Home » C# Language » BitWise Operations in C#

BitWise Operations in C#

C# has lots of flexibility over manipulating with bits. Before I start explaining about bit wise manipulation I would like to give some inputs on binary operations.

Technologies: .NET 1.0/1.1,Visual C# .NET
Total downloads :
Total page views :  116636
Rating :
 0/5
This article has been rated :  0 times
   Print Read/Post comments Post a comment  Rate  
   Email to a friend  Bookmark  Similar Articles  Author's other articles  
 
ArticleAd
Become a Sponsor



Introduction

C# has lots of flexibility over manipulating with bits. Before I start explaining about bit wise manipulation I would like to give some inputs on binary operations.

Binary numbers

With only two symbols you can represent any type of information you want, these symbols can be {a,b}, {0,1} or the {beep, beeeep} of the Morse code. When you want to work with boolean (1) expressions or place multiple values in a single byte (group of 8 bit), it is more convenient for you to represent these bytes as binary numbers.

Binary numbers are specifically required to build bit-masks, used with boolean operators (AND, OR, XOR, NOT). In other words, 235 is the addition of 128+64+32+8+2+1. Binary numbers seem to be very long numbers, but they are much easier for a computer to handle since each bit, or binary digit can be represented by an electrical signal which is either on or off

 

 

 



128 64 32 16 8 4 2 1
1 1 0 1 0

Using the above table you can see that the decimal number 11010 is equal to 26 in the decimal system. (16+8+2=26) - Use the base checker at the top to turn 26 into binary if you want to check.

Using binary notation is a very good exercise for Numerical Hour since the principles can be quickly taught - also some very interesting math's can be done quickly - e.g.

To half any number - simply move the digits 1 place to the right: 101100 = 44 , 10110=22
(what happens if their is a fractional part - Can you make a rule?)

To double a number - simply add a zero on the end: 1111 = 15, 11110 = 30 

Some of the important binary operations, which I am going to discuss, are following:

AND operation

OR operation

Shift operations

As we know in binary all 1's are true and 0's are considered to be false.

When AND operations is done on the binary value following are the results of AND.

Following is the truth table for AND operation.

A B AND
0 (false) 0 (false) 0 (false)
1(True) 0 (false) 0 (false)
0 (false) 1(True) 0 (false)
1(True) 1(True) 1(True)

*When using AND operation it gives True only when both the values are True.

In C# to implement the AND operation using '&' Operator.

Now let's see e first program

Program 1

using System;
class
MyClass
{
public static void
Main()
{
byte varA=10;
// binary equivalent for 10 is 01010
byte varB=20;
// binary equivalent for 20 is 10100
long result=varA & varB;
// AND operation result should be 00000
Console.WriteLine("{0} AND {1} Result :{2}",varA,varB,result);
varA=10;
// binary equivalent for 10 is 01010
varB=10;
// binary equivalent for 10 is 01010
result=varA & varB;
// AND operation result should be 01010
//so the result will contain 10 in decimal
Console.WriteLine("{0} AND {1} Result : {2}",varA,varB,result);
}
}

Program Output:

C:\csharp\progs>bitprg1

10  AND  20 Result :0
10  AND  10 Result : 10 

When OR operations is done on the binary value following are the results of OR.

Following is the truth table for OR operation.

A B OR
0 (false) 0 (false) 0 (false)
1(True) 0 (false) 1(True)
0 (false) 1(True) 1(True)
1(True) 1(True) 1(True)

*When using OR operation it gives FALSE only when both the values are FALSE. In all other cases OR operation gives true.

In C# to implement the OR operation using '|' Operator.

Now let's see e first program

Program 2

using System;
class
MyClass
{
public static void
Main()
{
byte varA=10;
// binary equivalent for 10 is 01010
byte varB=20;
// binary equivalent for 20 is 10100
long result=varA | varB;
// OR operation result should be 11110
//so the result will contain 30 in decimal
Console.WriteLine("{0} OR {1} Result :{2}",varA,varB,result);
varA=10;
// binary equivalent for 10 is 01010
varB=10;
// binary equivalent for 10 is 01010
result=varA | varB;
// OR operation result should be 01010
//so the result will contain 10 in decimal
Console.WriteLine("{0} OR {1} Result : {2}",varA,varB,result);
}
 

Program4 output:

C:\csharp\progs>bitprg2

10  OR  20 Result :30
10  OR  10 Result : 10 

There are two kinds of Shift operations on Right Shift and Left Shift.

Right Shift operation is used for shifting the bits positions towards right side.

Left Shift operation is used for shifting the bits positions towards left side.

When Right Shift operations are done on a binary value the bits are shifted to one position towards right side.

Let's take a example:

The binary equivalent for the decimal value 10 is 1010.So when Right Shift operation is done this value. The all the bits will move one position towards right so the right most bits will be truncated and left most bits is filled with zero.

1010 when shifted to right one position its value will be 0101

So the decimal equivalent for 0101 is 5. This means when decimal value 10 shifted to right one position its value is reduced to 5.

In C# to implement the Right shift operation using '>>' Operator.

Now let's see e first program

Program 3

using System;
class
MyClass
{
public static void
Main()
{
byte varA=10;
// binary equivalent for 10 is 01010
long result=varA >> 1;
// Right Shift operation result should be 0101
//so the result will contain 5 in decimal
Console.WriteLine("{0} is Right Shifted to 1 position Result :{1}",varA,result);
}
}

Program3 output:

C:\csharp\progs>bitprg3

10 is Right Shifted to 1 position Result :5

When Left Shift operations are done on a binary value the bits are shifted to one position towards left side.

Let's take an example:

The binary equivalent for the decimal value 10 is 1010.

So when left Shift operation is done this value. The all the bits will move one position towards left so the left most bit will be truncated and right most bit is filled with zero.1010 when shifted to right one positions its value will be 10100.

So the decimal equivalent for 10100 is 20. This means when decimal value 10 shifted to left one position its value is increased to 20.

In C# to implement the Left shift operation using '<<' Operator.

Now let's see e first program

Program 4

using System;
class
MyClass
{
public static void
Main()
{
byte varA=10;
// binary equivalent for 10 is 01010
long result=varA << 1;
// Left Shift operation result should be 10100
//so the result will contain 20 in decimal
Console.WriteLine("{0} is Left Shifted to 1 position Result :{1}",varA,result);
}
}

Program4 output:

C:\csharp\progs>bitprg4

10 is Left Shifted to 1 position Result :20

Further reading

1. .Net  More information on .Net technologies 
 


Login to add your contents and source code to this article
 [Top] Rate this article
 About the author
 
Chandra Hundigam
Chandra Hundigam has Master degree in Computer Application, Microsoft Certified Professional and Software Consultant. He's significantly involved in enterprise application development and distributed object oriented system development using Microsoft .Net, Sun Java/J2EE technology to serve global giants in the Media, finance, mortgage and software industries.Presently working as Software Consultant for a US-based company.His areas of interests are in emerging Technologies.
Looking for C# Consulting?
C# Consulting is founded in 2002 by the founders of C# Corner. Unlike a traditional consulting company, our consultants are well-known experts in .NET and many of them are MVPs, authors, and trainers. We specialize in Microsoft .NET development and utilize Agile Development and Extreme Programming practices to provide fast pace quick turnaround results. Our software development model is a mix of Agile Development, traditional SDLC, and Waterfall models.
Click here to learn more about C# Consulting.
 
Introducing MaxV - one click. infinite control. Hyper-V Hosting from MaximumASP.
Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
Dynamic PDF
ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications.
Boost the performance of your .NET applications
“ANTS Profiler took us straight to the specific areas of our code which were the cause of our performance issues." Terry Phillips, Sr. Developer, Harley-Davidson Dealer Systems. Download your free trial of ANTS Profiler.
Go.NET
Build custom interactive diagrams, network, workflow editors, flowcharts, or software design tools. Includes many predefined kinds of nodes, links, and basic shapes. Supports layers, scrolling, zooming, selection, drag-and-drop, clipboard, in-place editing, tooltips, grids, printing, overview window, palette. 100% implemented in C# as a managed .NET Control. Document/View/Tool architecture with many properties&events. Optional automatic layout.
Dundas Software
Dundas Chart for .NET is the most advanced .NET charting package available today.  With an extremely complete feature set, elegant architecture and easy implementation, Dundas Chart can quickly add advanced Charting functionality to enhance and transform ASP.NET and Windows Forms applications.  Whether you are implementing charting into internal projects, or building applications for clients, Dundas Chart offers advanced technology and advanced results to get the most out of data.
 
   Print Read/Post comments Post a comment  Rate  
   Email to a friend  Bookmark  Similar Articles  Author's other articles  
 
 Post a Feedback, Comment, or Question about this article
Subject:  
Comment:  
ArticleAd
Become a Sponsor
Latest Comments:
Subject Posted By Posted On
Not OperatorJesudas7/3/2007
Hello I want to use Not operator. Ex: Not (15) this is working in VB.NET the result is -16. (!15) it is not working in C# . NETt.
Reply | Email | Delete | Modify | 
 
 
Re: Not OperatorjakeTheSnake7/31/2007
In c# it is ~ operator.
Reply | Email | Delete | Modify | 

 Hosted by MaximumASP  |  Found a broken link?  |  Contact Us  |  Terms & conditions  |  Privacy Policy  |  Site Map  |  Suggest an Idea  |  Media Kit
Current Version: 5.2009.6.2
 © 1999 - 2009  Mindcracker LLC. All Rights Reserved