Presentation is loading. Please wait.

Presentation is loading. Please wait.

Bit Fields & Bitwise Operations

Similar presentations


Presentation on theme: "Bit Fields & Bitwise Operations"— Presentation transcript:

1 Bit Fields & Bitwise Operations
Professor Hugh C. Lauer CS-2303, System Programming Concepts (Slides include materials from The C Programming Language, 2nd edition, by Kernighan and Ritchie, Absolute C++, by Walter Savitch, The C++ Programming Language, Special Edition, by Bjarne Stroustrup, and from C: How to Program, 5th and 6th editions, by Deitel and Deitel) CS-2303, A-Term 2012 Bit Fields & Bitwise Operations

2 Bit Fields & Bitwise Operations
See §2.9 and §6.9 in K&R Many situations, need to operate on the bits of a data word – Register inputs or outputs Controlling attached devices Obtaining status Especially ECE-2801 and ECE-3803 CS-2303, A-Term 2012 Bit Fields & Bitwise Operations 2

3 Bitwise Operations in Integers
Corresponding bits of both operands are combined by the usual logic operations. & – AND Result is 1 if both operand bits are 1 | – OR Result is 1 if either operand bit is 1 ^ – Exclusive OR Result is 1 if operand bits are different ~ – Complement Each bit is reversed << – Shift left Multiply by 2 >> – Shift right Divide by 2 Apply to all kinds of integer types:– Signed and unsigned char, short, int, long, long long CS-2303, A-Term 2012 Bit Fields & Bitwise Operations 3

4 Bit Fields & Bitwise Operations
Examples unsigned int c, a, b; c = a & b; c = a | b; c = a ^ b; c = ~a; c = a << 2; c = a >> 3; 1 a 1 b CS-2303, A-Term 2012 Bit Fields & Bitwise Operations 4

5 Bit Fields & Bitwise Operations
Right Shift is Tricky unsigned int c, a; c = a >> 3; signed int c, a, b; c = b >> 3; 1 a 1 b 1 a CS-2303, A-Term 2012 Bit Fields & Bitwise Operations 5

6 Bit Fields & Bitwise Operations
Two Approaches Traditional C Use #define and a lot of bitwise operations Modern Use bit fields Much more frequent in real world! CS-2303, A-Term 2012 Bit Fields & Bitwise Operations

7 Example – Printer Status Register
Empty paper Paper jam Low ink Clean Traditional C definition of bit fields #define EMPTY 01 #define JAM #define LOW_INK 16 #define CLEAN 64 CS-2303, A-Term 2012 Bit Fields & Bitwise Operations 7

8 Printer Status Register (continued)
Empty paper Paper jam Low ink Clean Traditional bit fields (continued) char status; if (status == (EMPTY | JAM)) ...; if (status == EMPTY || status == JAM) ...; while (! status & LOW_INK) ...; int flags |= CLEAN /* turns on CLEAN bit */ int flags &= ~JAM /* turns off JAM bit */ CS-2303, A-Term 2012 Bit Fields & Bitwise Operations 8

9 Traditional Bit Definitions
Used very widely in C Including a lot of existing code No checking You are on your own to be sure the right bits are set Machine dependent Need to know bit order in bytes, byte order in words Integer fields within a register Need to AND and shift to extract Need to shift and OR to insert CS-2303, A-Term 2012 Bit Fields & Bitwise Operations 9

10 Printer Status Register (cont.)
Empty paper Paper jam Low ink Clean count An integer field (traditional style) #define COUNT (8|16|32|64|128) int c = (status & COUNT) >> 3; status |= (c << 3) & COUNT; CS-2303, A-Term 2012 Bit Fields & Bitwise Operations 10

11 “Modern” Bit-Field Definitions
See Kernighan & Ritchie, §6.9 Like a struct, except Each member is a bit-field within a word Accessed like members of a struct Fields may be named or unnamed Machine-dependent Order of bits in word Size of word CS-2303, A-Term 2012 Bit Fields & Bitwise Operations

12 Modern Bit-field Definitions
Empty paper Paper jam Low ink Clean struct statusReg { unsigned int emptyPaperTray :1; unsigned int paperJam :1; :2; unsigned int lowInk :1; :1; unsigned int needsCleaning :1; :1; }; CS-2303, A-Term 2012 Bit Fields & Bitwise Operations 12

13 Printer Status Register (cont.)
Empty paper Paper jam Low ink Clean count struct statusReg { unsigned int emptyPaperTray :1; unsigned int paperJam :1; :1; unsigned int count :5; :1; unsigned int lowInk :1; :1; unsigned int needsCleaning :1; :1; }; CS-2303, A-Term 2012 Bit Fields & Bitwise Operations 13

14 Modern Bit-fields (continued)
struct statusReg s; if (s.empty && s.jam) ...; while(! s.lowInk) ...; s.needsCleaning = true; s.Jam = false; int c = s.count; s.count -= 1; CS-2303, A-Term 2012 Bit Fields & Bitwise Operations 14

15 Questions about Bit Fields?
CS-2303, A-Term 2012 Bit Fields & Bitwise Operations 15


Download ppt "Bit Fields & Bitwise Operations"

Similar presentations


Ads by Google