Bit Manipulation. Get Bit from the particular Position Suppose you want to get a bit from the 4 th...

14
Bit Manipulation

Transcript of Bit Manipulation. Get Bit from the particular Position Suppose you want to get a bit from the 4 th...

Page 1: Bit Manipulation. Get Bit from the particular Position Suppose you want to get a bit from the 4 th position. You can call int get_bit_val(int number_send,int.

Bit Manipulation

Page 2: Bit Manipulation. Get Bit from the particular Position Suppose you want to get a bit from the 4 th position. You can call int get_bit_val(int number_send,int.

Get Bit from the particular Position

• Suppose you want to get a bit from the 4th position.

• You can call • int get_bit_val(int number_send,int position)

function.• In this function, number_send is our data from

where we want to get a bit. Second pass the position from where you want to get a bit.

Page 3: Bit Manipulation. Get Bit from the particular Position Suppose you want to get a bit from the 4 th position. You can call int get_bit_val(int number_send,int.

Get Bit functionint get_bit_val(int number_send,int position){ int number1=1; number1=number1<<(position-1); if(number_send & number1) { return (1); } else { return (0); }}

Page 4: Bit Manipulation. Get Bit from the particular Position Suppose you want to get a bit from the 4 th position. You can call int get_bit_val(int number_send,int.

How Get bit function works?• First argument we can pass as int. so ascii

value is passed there as a number_send.

• Suppose user has entered a character N that you pass as a argument to get bit function.

• Ascii of N is 78 that is 1001110.

• Second argument you pass for the 4th position bit.

Page 5: Bit Manipulation. Get Bit from the particular Position Suppose you want to get a bit from the 4 th position. You can call int get_bit_val(int number_send,int.

Contd.• In the first step number1 =1 is initialized.

• Number_send

Number1

Number1<<(position-1) : Number1<<3

• Number_send

Number1

0 1 0 0 1 1 1 0

0 0 0 0 0 0 0 1

0 1 0 0 1 1 1 0

0 0 0 0 1 0 0 0

Page 6: Bit Manipulation. Get Bit from the particular Position Suppose you want to get a bit from the 4 th position. You can call int get_bit_val(int number_send,int.

• if((number_send & number1))

return (1);

else

return (0);• Number_send

Number1

It will generate answer 0 or 1 as per the number_send value. In this case, it will generate 1.

Contd.

0 1 0 0 1 1 1 0

0 0 0 0 1 0 0 0&

Page 7: Bit Manipulation. Get Bit from the particular Position Suppose you want to get a bit from the 4 th position. You can call int get_bit_val(int number_send,int.

Set Bit function

• Through this function, we can set the bit with our own value on the particular position.

• The function• void setbit(int *data, int pos, int val) takes 3

argument one is data, second is position and third is the value which we want to set on the particular position in the data.

Page 8: Bit Manipulation. Get Bit from the particular Position Suppose you want to get a bit from the 4 th position. You can call int get_bit_val(int number_send,int.

Set Bit Function• void setbit(int *data, int pos, int val)

• {

• int mask=1;

• mask = mask<<(pos-1);

• if(val==0)

• {

• mask=~mask;

• *data=*data & mask;

• }

• else

• {

• *data=*data | mask;

• }

• }

Page 9: Bit Manipulation. Get Bit from the particular Position Suppose you want to get a bit from the 4 th position. You can call int get_bit_val(int number_send,int.

How set bit function works?• First one variable mask is initialized with

one then after it is shifted on the particular position.

• Then if value which is passed as third argument, if it is 0 then mask is complemented. So, if we perform data & mask then it sets 0 on that position.

• If value which we want to set is 1 then data is ored with 1 so it sets 1 on that position.

Page 10: Bit Manipulation. Get Bit from the particular Position Suppose you want to get a bit from the 4 th position. You can call int get_bit_val(int number_send,int.

Example

• In the set bit function suppose arguments are for data N, position is 4 and new value what we want to set is 0. Initially it is

• Data

• Mask

• After performing left shift for mask

• Data

• Mask

0 1 0 0 1 1 1 0

0 0 0 0 0 0 0 1

0 1 0 0 1 1 1 0

0 0 0 0 1 0 0 0

Page 11: Bit Manipulation. Get Bit from the particular Position Suppose you want to get a bit from the 4 th position. You can call int get_bit_val(int number_send,int.

• if(val==0)

{ mask=~mask; *data=*data & mask; }In our case value is 0, means we want to set 0 on 4th position.

mask~mask

Then last operation is data & mask

Example

0 0 0 0 1 0 0 0

1 1 1 1 0 1 1 1

0 1 0 0 1 1 1 0 &

= 0 1 0 0 0 1 1 0

1 1 1 1 0 1 1 1

Page 12: Bit Manipulation. Get Bit from the particular Position Suppose you want to get a bit from the 4 th position. You can call int get_bit_val(int number_send,int.

Insert Bit• int ins_bit_pos(int number_send,int position,int value) {• int num1,num2;• num1=number_send;• num1=num1>>(position-1);• num1=num1<<(position-1);• num2=number_send-num1;• num1=num1<<1;• num1=num1 | num2;• if(value==1)• {• num1=set_bit_val(num1,position,value);• }• return (num1);• }

Page 13: Bit Manipulation. Get Bit from the particular Position Suppose you want to get a bit from the 4 th position. You can call int get_bit_val(int number_send,int.

• We want to add bit 0 on the 3rd position.

• Suppose number_send is N. which is assigned to num1 in the first step. So,

• Num1

• Num1>> (position-1)

• Num1<<(position-1)

• Num2 = number_send – num1

0 1 0 0 1 1 1 0

0 0 0 1 0 0 1 1

0 1 0 0 1 1 0 0

0 1 0 0 1 1 1 0 0 1 0 0 1 1 0 0-

= 0 0 0 0 0 0 1 0

Page 14: Bit Manipulation. Get Bit from the particular Position Suppose you want to get a bit from the 4 th position. You can call int get_bit_val(int number_send,int.

• num1= num1<<1

• num1=

• Num1<<1

• num1 = num1|num2

• Bit 0 is set on the 3rd Position.

0 1 0 0 1 1 0 0

1 0 0 1 1 0 0 0

1 0 0 1 1 0 0 0 0 0 0 0 0 0 1 0|

= 1 0 0 1 1 0 1 0