Download presentation
Presentation is loading. Please wait.
1
Bitwise Structures Chapter 9: C programming Language ספטמבר 04
Copyright Meir Kalech
2
What is Bitwise Structure?
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: 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!!! ספטמבר 04 Copyright Meir Kalech
3
What is Bitwise Structure?
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”. ספטמבר 04 Copyright Meir Kalech
4
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). ספטמבר 04 Copyright Meir Kalech
5
Bitwise Operators & bitwise AND | bitwise OR ^ bitwise XOR ~
1’s compliment << Shift left >> Shift right All these operators can be suffixed with = For instance a &= b; is the same as a = a & b; ספטמבר 04 Copyright Meir Kalech
6
Bitwise Operators – truth table
1 ספטמבר 04 Copyright Meir Kalech
7
Bitwise Operators - Examples
& | ^ ~ >>3 <<3 ספטמבר 04 Copyright Meir Kalech
8
Setting Bits How can we set a bit on or off?
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. ספטמבר 04 Copyright Meir Kalech
9
Setting Bits For instance, how can we turn on the light in room #3?
lights: char lights = 0x0; char mask = 0x1; mask <<= 2; lights |= mask; mask: mask: lights: ספטמבר 04 Copyright Meir Kalech
10
Setting Bits For instance, how can we turn off the light in room #3?
lights: char lights = 0x27; char mask = 0xfb; lights &= mask; mask: lights: ספטמבר 04 Copyright Meir Kalech
11
Getting Bits How can we know if a bit is on or off?
Manipulations on bits are enabled by mask and bitwise operators. Bitwise AND of anything with 1 results in the same value. ספטמבר 04 Copyright Meir Kalech
12
Getting Bits For instance, how can we check if the light in room #3 is turned on or off? lights: char lights = 0x27; char mask = 0x1; mask <<= 2; if(lights & mask) puts(“turned on”); else puts(“turned off”); mask: mask: lights & mask: ספטמבר 04 Copyright Meir Kalech
13
Bitwise - Example Suppose we have 8 rooms:
Light is on in the rooms requested by the user. Print which rooms are lighted. void main() { unsigned char lights = 0; set_lights(&lights); print_lights(lights); } ספטמבר 04 Copyright Meir Kalech
14
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 mask 1 answer: 1 (yes) *lights |= mask 1 ספטמבר 04 Copyright Meir Kalech
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; } lights 1 mask 1 answer: 0 (no) *lights |= mask 1 ספטמבר 04 Copyright Meir Kalech
16
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 1 mask 1 answer: 1 (yes) *lights |= mask 1 ספטמבר 04 Copyright Meir Kalech
17
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 1 mask 1 answer: 1 (yes) *lights |= mask 1 ספטמבר 04 Copyright Meir Kalech
18
Bitwise - Example room #1 is lighted
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 1 mask 1 lights & mask 1 Output: room #1 is lighted ספטמבר 04 Copyright Meir Kalech
19
Bitwise - Example room #2 is NOT lighted
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 1 mask 1 lights & mask Output: room #2 is NOT lighted ספטמבר 04 Copyright Meir Kalech
20
Bitwise - Example room #3 is lighted
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 1 mask 1 lights & mask 1 Output: room #3 is lighted ספטמבר 04 Copyright Meir Kalech
21
Bitwise - Example room #4 is lighted
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 1 mask 1 lights & mask 1 Output: room #4 is lighted ספטמבר 04 Copyright Meir Kalech
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.