Bit Fields & Bitwise Operations

1 / 15

# Bit Fields & Bitwise Operations - PowerPoint PPT Presentation

Bit Fields & Bitwise Operations. CS-2303 System Programming Concepts (Slides include materials from The C Programming Language , 2 nd edition, by Kernighan and Ritchie and from C: How to Program , 5 th and 6 th editions, by Deitel and Deitel). Bitwise Operations.

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

## PowerPoint Slideshow about 'Bit Fields & Bitwise Operations' - cassandra

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

### Bit Fields & Bitwise Operations

CS-2303System Programming Concepts

(Slides include materials from The C Programming Language, 2nd edition, by Kernighan and Ritchie and from C: How to Program, 5th and 6th editions, by Deitel and Deitel)

Bit Fields & Bitwise Operations

Bitwise Operations

See §2.9 and §6.9 in K&RSee §10.9 in D&D

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

Bit Fields & Bitwise Operations

Review – Bitwise Operations in Integers

& – 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

Corresponding bits of both operands are combined by the usual logic operations.

Apply to all kinds of integer types:–Signed and unsignedchar, short, int, long, long long

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;

b

a

1

1

1

0

1

1

0

1

0

1

0

0

1

0

0

0

Bit Fields & Bitwise Operations

Right Shift is Tricky

unsigned int c, a;

c = a >> 3;

signed int c, a, b;

c = b >> 3;

c = a >> 3;

a

a

b

1

1

0

1

1

1

1

0

1

1

1

1

0

0

0

1

0

0

0

0

0

0

1

0

0

1

1

1

1

1

1

0

1

1

1

1

0

0

0

0

0

1

0

0

0

0

0

1

Bit Fields & Bitwise Operations

Two Approaches
• Use #define and a lot of bitwise operations
• Modern
• Use bit fields

Much more frequent in real world!

Bit Fields & Bitwise Operations

Example – Printer Status Register

Traditional C definition of bit fields

#define EMPTY 01

#define JAM 02

#define LOW_INK 16

#define CLEAN 64

Clean

Low ink

Paper jam

Empty paper

Bit Fields & Bitwise Operations

Example – Printer Status Register (cont.)

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 */

Clean

Low ink

Paper jam

Empty paper

Bit Fields & Bitwise Operations

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

Bit Fields & Bitwise Operations

Example – Printer Status Register (cont.)

#define COUNT (8|16|32|64|128)

int c = (status & COUNT) >> 3;

status |= (c << 3) & COUNT;

count

Clean

Low ink

Paper jam

Empty paper

Bit Fields & Bitwise Operations

“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

Bit Fields & Bitwise Operations

Modern Bit-field Definitions

struct statusReg {unsigned int emptyPaperTray :1;unsigned int paperJam :1; :2; unsigned int lowInk :1; :1;unsigned int needsCleaning :1; :1;

};

Clean

Low ink

Paper jam

Empty paper

Bit Fields & Bitwise Operations

Example – Printer Status Register (cont.)

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;

};

count

Clean

Low ink

Paper jam

Empty paper

Bit Fields & Bitwise Operations

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;

Bit Fields & Bitwise Operations