0% found this document useful (0 votes)
92 views

Bitwise Operator Structures

The document discusses bitwise structures in C programming. It explains that while a single bit cannot be directly accessed, bitwise operators allow manipulating individual bits of a byte. These operators include AND, OR, XOR, NOT, left shift, and right shift. The document provides examples of using bitwise operators to set, clear, and check individual bits that represent data like which rooms have their lights turned on in an 8 room building. Code samples are given to set the light status by room using bitwise OR, and print the light status by room using bitwise AND to check each bit.

Uploaded by

rajuhd
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
92 views

Bitwise Operator Structures

The document discusses bitwise structures in C programming. It explains that while a single bit cannot be directly accessed, bitwise operators allow manipulating individual bits of a byte. These operators include AND, OR, XOR, NOT, left shift, and right shift. The document provides examples of using bitwise operators to set, clear, and check individual bits that represent data like which rooms have their lights turned on in an 8 room building. Code samples are given to set the light status by room using bitwise OR, and print the light status by room using bitwise AND to check each bit.

Uploaded by

rajuhd
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

What is Bitwise Structure?






C programming Language

Chapter 12:

It is better to define only 8 bits since a bit can also


store the values 0 or 1.
But the problem is that there is no C type which is
1 bit long (char is the longer with 1 byte).
Solution: define a char (8 bits) but refer to each bit
separately.
Bitwise operators, introduced by the C language,
provide one of its more powerful tools for using and
manipulating memory. They give the language the
real power of a low-level language.

Bitwise Structures
Lecturer: Natalie Fridman

Based on slides created by Meir Kalech

What is Bitwise Structure?







What is Bitwise Structure?




Accessing bits directly is fast and efficient,


especially if you are writing a real-time
application.
A single bit cannot be accessed directly,
since it has no address of its own.
The language introduces the bitwise
operators, which help in manipulating a
single bit of a byte.
bitwise operators may be used on integral
types only (unsigned types are preferable).




We need to define an array of at least 8 chars.


If the light of room 3 is turned on the value of
the third char is 1, otherwise 0.
Total array of 64 bits.

EXPENSIVE in place and time!!!


4

The smallest type is of 8 bits (char).


Sometimes we need only a single bit.
For instance, storing the status of the lights
in 8 rooms:

Bitwise Operators Examples


11010011
&
10001100
-----------10000000
~11010011
-----------00101100

11010011
|
10001100
-----------11011111
11010011>>3
-----------00011010

Bitwise Operators

11010011
^
10001100
-----------01011111

&
|
^
~
<<
>>

11010011<<3
-----------10011000

bitwise AND
bitwise OR
bitwise XOR
1s compliment
Shift left
Shift right

All these operators can be suffixed with =


For instance a &= b; is the same as a = a & b;
7

Bitwise Operators
truth table

Setting Bits


How can we set a bit on or off?

a&b

a|b

a^b

~a

Manipulations on bits are enabled by


mask and bitwise operators.

Bitwise OR of anything with 1 results


in 1.

Bitwise AND of anything with 0


results in 0.
8

Getting Bits

Setting Bits

 How

can we know if a bit is on


or off?

For instance, how can we turn on


the light in room #3?
lights: 00000000

 Manipulations

on bits are
enabled by mask and bitwise
operators.

char lights = 0x0;


char mask = 0x1;
mask <<= 2;
lights |= mask;

 Bitwise

AND of anything with 1


results in the same value.

mask: 00000001
mask: 00000100
lights: 00000100

11

Getting Bits


Setting Bits

For instance, how can we check if


the light in room #3 is turned on or
off?
char lights = 0x27;
char mask = 0x1;
mask <<= 2;
if(lights & mask)
puts(turned on);
else
puts(turned off);

lights: 00100111

lights: 00100111
char lights = 0x27;
char mask = 0xfb;
lights &= mask;

mask: 00000001
mask: 00000100

mask: 11111011
lights: 00100011

lights & mask: 00000100


12

For instance, how can we turn off


the light in room #3?

10

Bitwise - Example
void set_lights(unsigned char *lights)
{
int j, answer;
unsigned char mask;
for(j=0,mask=1; j<8; j++,mask<<=1)
{
answer=0;
printf(lights in room #%d?, j+1);
scanf(%d, &answer);
if(answer)
*lights |= mask;
}
}

Bitwise - Example
Suppose we have 8 rooms:

lights
0 0 0 0 0 0 0 1
mask

Light is on in the rooms requested by the


user.

Print which rooms are lighted.

0 0 0 0 0 0 1 0
answer: 0 (no)

void main()
{
unsigned char lights = 0;
set_lights(&lights);
print_lights(lights);
}

*lights |= mask
0 0 0 0 0 0 0 1

15

Bitwise - Example
void set_lights(unsigned char *lights)
{
int j, answer;
unsigned char mask;
for(j=0,mask=1; j<8; j++,mask<<=1)
{
answer=0;
printf(lights in room #%d?, j+1);
scanf(%d, &answer);
if(answer)
*lights |= mask;
}
}

Bitwise - Example
void set_lights(unsigned char *lights)
{
int j, answer;
unsigned char mask;
for(j=0,mask=1; j<8; j++,mask<<=1)
{
answer=0;
printf(lights in room #%d?, j+1);
scanf(%d, &answer);
if(answer)
*lights |= mask;
}
}

lights
0 0 0 0 0 0 0 1
mask
0 0 0 0 0 1 0 0
answer: 1 (yes)
*lights |= mask
0 0 0 0 0 1 0 1

16

13

lights
0 0 0 0 0 0 0 0
mask
0 0 0 0 0 0 0 1
answer: 1 (yes)
*lights |= mask
0 0 0 0 0 0 0 1

14

Bitwise - Example
void print_lights(unsigned char lights)
{
int j;
unsigned char mask;
for(j=0,mask=1; j<8; j++,mask<<=1)
{
if(lights & mask)
printf(room #%d is lighted,j+1);
else
printf(room #%d is NOT lighted,j+1);
}
}

Bitwise - Example
void set_lights(unsigned char *lights)
{
int j, answer;
unsigned char mask;
for(j=0,mask=1; j<8; j++,mask<<=1)
{
answer=0;
printf(lights in room #%d?, j+1);
scanf(%d, &answer);
if(answer)
*lights |= mask;
}
}

lights
0 0 0 0 1 1 0 1
mask
0 0 0 0 0 0 1 0

lights & mask


0 0 0 0 0 0 0 0
Output:

lights
0 0 0 0 0 1 0 1
mask
0 0 0 0 1 0 0 0
answer: 1 (yes)
*lights |= mask
0 0 0 0 1 1 0 1

room #2 is NOT lighted


19

Bitwise - Example
void print_lights(unsigned char lights)
{
int j;
unsigned char mask;
for(j=0,mask=1; j<8; j++,mask<<=1)
{
if(lights & mask)
printf(room #%d is lighted, j+1);
else
printf(room #%d is NOT lighted, j+1);
}
}

Bitwise - Example
void print_lights(unsigned char lights)
{
int j;
unsigned char mask;
for(j=0,mask=1; j<8; j++,mask<<=1)
{
if(lights & mask)
printf(room #%d is lighted,j+1);
else
printf(room #%d is NOT lighted,j+1);
}
}

lights
0 0 0 0 1 1 0 1
mask
0 0 0 0 0 1 0 0

lights & mask


0 0 0 0 0 1 0 0
Output:

room #3 is lighted
20

17

lights
0 0 0 0 1 1 0 1
mask
0 0 0 0 0 0 0 1

lights & mask


0 0 0 0 0 0 0 1
Output:

room #1 is lighted
18

Bitwise - Example
void print_lights(unsigned char lights)
{
int j;
unsigned char mask;
for(j=0,mask=1; j<8; j++,mask<<=1)
{
if(lights & mask)
printf(room #%d is lit, j+1);
else
printf(room #%d is NOT lit, j+1);
}
}

lights
0 0 0 0 1 1 0 1
mask
0 0 0 0 1 0 0 0

lights & mask


0 0 0 0 1 0 0 0
Output:

room #4 is lighted
21

You might also like