Operators in C - Part 3

Continued from Part 2

vi) Bitwise Operators : We have already said that, numbers are internally stored as 1's and 0's which are called Bits. Though we may say 8 + 6, internally these numbers are represented in binary and addition is carried out on them. C has a set of operators that allow as to perform the binary operators. These operators comes in handy when we need to speed of certain operations. For example, I need to multiply a number (say 3) by 2. The result of the operation is 6 as we know. In binary 3 is represented as (00000011). Now if we shift the bits by one position towards the left, we get (00000110), which is the equivalent of 6. So inorder to multiply a number by 2, we can left shift the binary equivalent once. If we need to multiply by 4, we have to left shift twice. Let us have a look at the binary operators.

There are various other uses of these bitwise operations like the & operator (Bitwise And) which comes in handy when we need to find out whether any flag is set.

Code
int iNum1 = 5; // Binary Equivalent - 0101

int iNum2 = 11; // Binary Equivalent - 1010

// Bitwise And Operation
printf("%d & %d gives %d\n",iNum1,iNum2,(iNum1&iNum2));

// Bitwise Or Operation
printf("%d | %d gives %d\n",iNum1,iNum2,(iNum1|iNum2));

// Bitwise Exclusive OR
printf("%d ^ %d gives %d\n",iNum1,iNum2,(iNum1^iNum2));

// Left Shift
printf("%d << 1 gives %d\n",iNum1,(iNum1<<1));

// Right Shift
printf("%d >> 1 gives %d",iNum2,(iNum2>>1));

Output
5 & 11 gives 1
5 | 11 gives 15
5 ^ 11 gives 14
5 << 1 gives 10
11 >> 1 gives 5

So what has happened, the Bitwise And operator and Or operators followed the truth table as explained in the Relational Operators in this post. It takes one bit from iNum1 and performs an AND/OR/XOR operation with the corresponding bit in the iNum2 operation.

Lets perform the And operation following the truth table.
iNum1 = 5  = 0 1 0 1
& & & &
iNum2 = 11 = 1 0 1 1
AND gives = 0 0 0 1 = which Equals to 1 (in decimal)

As shown above we perform AND operation on corresponding bits of the numbers.

Similarly XOR follows the truth table
ABOutput
000
011
101
110

Hence (0101) ^ (1011) gives (1110) which is 14 in decimal.

And this XOR operator can be used for SWAP two numbers without using a tempory variable. (Will explain this later).

And I have already said about Left shift and right shift operators. They shift the binary digits one position towards left or right.

vii) Conditional or Ternary Operator : Ok I need to find which is the biggest of two numbers. how will i write the code ?
if a is greater than b then 
biggest number is a
else
biggest number is b

Now that is 4 lines. Why not in a single line ? Yes for that we use Ternary Operator. and This is how we write it
Code
   int iNum1 = 5; 

int iNum2 = 11;

// Ternary Operator - expr1?expr2:expr3
// expr1 is the condition to be evaluated
// expr2 is the statement to be executed when condition expr1 is true
// expr3 is the statement to be executed when condition expr1 is false
int iNum3= (iNum1 >> iNum2)?iNum1:iNum2;

Expr1 (5 >> 11) is false. So Expr3(iNum2) is evaluated. Thus iNum2 is assigned to iNum3.

The drawback is only one statement can be used in Expr2 or Expr3.

viii) Special Operators : There are many special operators like
& - Pointer Operator - Address Of Operator
* - Pointer Operator - Value at Operator
-> - Pointer Operator - Member Selection operator
. - Member Selection operator
, - Comma Operator
sizeof() - SizeOf Operator

Here I will explain comma(,) operator alone. As the others require detailed post and cannot be stuffed in here.

Consider the following code,
Code
   iNum1 = 5;
iNum2 = 10;
iNum3 = iNum1+iNum2;

This above code can be written in single line using the comma operator like this.
Code
      iNum3 = (iNum1 = 5,iNum2 = 10,iNum1+iNum2);

The comma operator is used for linking two or more related statements. The execution starts from left to right.

That is all regarding Operators, Will update with more basic information in the future posts :)

3 comments:

Pnane Weg said...

louboutin shoes
the north face outlet
nike shoes wholesale
ugg boots sale
north face jackets
gucci shoes for men
rolex watches for women
cheap wholesale jordans
celine handbags
juicy couture outlet
gucci sunglasses
fitflops clearance
air jordan shoes for sale
nike running shoes
cheap north face
coach purse
celine outlet
jordan retro 11
michael kors outlet online sale
coach factory outlet online
fitflop shoes
coach factory store online
christian louboutin outlet
michael kors bags clearance
coach handbags
celine bags
dior outlet store
canada goose coats on sale
red bottom shoes
coach purses outlet
oakley sunglasses cheap
jordans
nike air max 90
jordan shoes
salomon boots
jordan retro 6
michael kors outlet online
gucci shoes
jordan shoes for women
jordan 3
fitflop shoes
columbia outlet stores
coach factory online
coach factory outlet
1016 wjl

Pnane Weg said...

kate spade outlet
nike outlet store
reebok shoes
ugg boots on sale 70% off
jordan 12
columbia clothing outlet
coach purses
nike outlet store online shopping
jordan shoes
dior outlet store
chanel outlet
christian louboutin shoes
michael kors outlet
coach handbag outlet
cheap canada goose coats
all jordan shoes
fitflop sandals
north face kids
converse outlet
hermes bags
michael kors bags
coach store
ugg boots
ugg boots outlet
ralph lauren polo outlet
tods outlet
ugg boots on sale
prada handbags
cheap jordans shoes
columbia outlet store
cheap michael kors handbags
jordan 6 black infrared
louboutin outlet
nike high heels online
gucci shoes
nike factory
ralph lauren outlet
nike store
north face jackets
north face jackets
toms outlet factory
michael kors outlet
jordan 13
hollister clothing store online
1016wjl

akmal niazi khan said...

This blog awesome and i learn a lot about programming from here.The best thing about this blog is that you doing from beginning to experts level.

Love from

Post a Comment

 
Template designed using TrixTG