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

Bits, Bytes, Bit Operations and Image Processing Image Processing

This document discusses representing and manipulating digital information at the bit level for image processing and other applications. It covers data types and sizes, integer representations like binary, octal, decimal and hexadecimal, bit operations, and manipulating bitmap image files. Examples provided include adding numbers using only bit operations, extracting bytes from an IP address, printing a number in octal, reading and modifying header information from a bitmap file, and dealing with byte alignments.

Uploaded by

Subash Gautam
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
45 views

Bits, Bytes, Bit Operations and Image Processing Image Processing

This document discusses representing and manipulating digital information at the bit level for image processing and other applications. It covers data types and sizes, integer representations like binary, octal, decimal and hexadecimal, bit operations, and manipulating bitmap image files. Examples provided include adding numbers using only bit operations, extracting bytes from an IP address, printing a number in octal, reading and modifying header information from a bitmap file, and dealing with byte alignments.

Uploaded by

Subash Gautam
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 41

Bits, Bytes, Bit Operations

and
image processing
15-123
Systems Skills in C and Unix
Representing Information
• Smallest Data unit is the “bit”

• Smallest addressable unit is the “byte”

• Each computer has a “word” size


– characteristic of computer architecture
– Indicate the nominal size of integers and pointers
– Most common size is 32-bits
– How many addressable units are there then?
Data Sizes
• Here are the typical 32-bit allocation for data
types (in bytes)
– char (1), short int (2), int (4), long int (4)
• In compaq alpha long int is 8
– char* (4), float (4), double (8)

• The exact size of data allocation depends on


both compiler and machine
Data value ranges
• <limits.h> library defines the range of values any data
type can assume.
• Applications that are designed to be portable must
use symbolic constants.
• Some examples
• INT_MIN
– Minimum value for a variable of type int.
– –2147483647 – 1
• INT_MAX
– Maximum value for a variable of type int.
– 2147483647
• UINT_MAX
– Maximum value for a variable of type unsigned int.
– 4294967295 (0xffffffff)
• LONG_MIN
– Minimum value for a variable of type long.
– –2147483647 – 1
• LONG_MAX
– Maximum value for a variable of type long.
Storage Classes
• auto
– Typical variables defined inside functions

• static
– Variables that retain values between function calls

• extern
– Declared within a function, but specifications given else
where

• register
Representation formats
• Binary

• Octal

• Decimal

• Hexadecimal
Addressing and byte ordering
• Little Endian
– Least significant byte first (DEC, Intel)

• Big Endian
– Most significant byte first (IBM, Motorola, SUN)
– I have been using big endian??

• Application programmers may not care about this


ordering
When byte ordering becomes an issue
• Communication of binary data over a network
between different machines

• Code written for networking applications must


then do their own conversions between
machines
Integer Representations
• Typical 32-bit machine uses
– 32-bit representation for int and unsigned
• Range:

– Compaq alpha uses 64 bits for long int


• Range:
Closer look at signed and unsigned
integers
• Consider a n-bit integer representation of an
unsigned integer

• Consider a n-bit integer representation of a


signed integer
Representing negative numbers
using 2’s complement
• One’s complement
~x

• Two’s complement
1 + ~x
Signed and unsigned numbers
• By default all constant values are signed
– int x = 20, y =0x45

• Can create an unsigned constant using


– unsigned x = 0x123u (or U)
Adding numbers
• Adding unsigned ints
– unsigned int x = 0x0000FA02
– unsigned int y = 0x000102FA

• Adding signed ints


– int x = 75, y=-34
– Binary representations
• 75 = 01001011
• 34 = 00100010
Bit Operations in C
• Bitwise AND ( &)
– 0x75 & 0x 96
Bitwise OR ( |)
0x75 | 0x 96
Bitwise negation (~)

~0x75
XOR ( ^ )
0x75 ^ 0x 96
Logic for adding
bit by bit
• Si = (Ai ^ Bi) ^ Cin
• Cout = (Ai & Bi ) | ((Ai ^ Bi) & Cin )
Bit adder
• Exercise: Given two unsigned char’s write a bit-by-bit adder
using formulas for sum and carry. How would you recognize
an overflow situation?
• unsigned char (unsigned char A, unsigned char B){

• }
Logical Operations in C
are different
• Logical AND (&&)
– 0x75 && 0x 96

• Logical OR (||)

• Logical Not ( ! )
Shifting in C
• Left Shift ( << )
– Right most bits are filled by 0’s

• Right shift ( >> )


– Left most bits are filled by most significant bit
Counting number of 1’s
• Let C(n) be the number of 1’s in n >=0
• What is the relation between C(n) and C(n/2)?
– When n is even
– When n is odd
Exercises
• Add two unsigned ints using only bit
operations (shifts and bitwise adding)
• Given an IP address: 64.65.221.109, extract
the 2nd byte (ie 65)
• Print any given number in octal using bit
operations.
getbit function
#define MASK(j) (1<<j)
int getBit(char w, unsigned j){
return (( w & MASK(j)) == 0) ? 0 : 1;
}

• What is an alternative way to write this?


printBinary
• Complete the function printBinary
void printBinary(unsigned char w){

}
setbit function
#define MASK(j) (1<<j)
int setBit(char w, unsigned j, short value){
if (value == 0) return (w & ~MASK(j));
else if (value == 1) return w | MASK(j);
else return w;
}
Masking
• Masking is a technique to extract bits from a
value
– Determine if the number is even or odd

– Determine if the number is divisible by 8

– IP addresses – 192.168.0.20
Masking
• Compiler symbol tables
– Maintain information in most compact ways
– #define KEYWORD 01
– #define EXTERNAL 02
– #define STATIC 04
– Suppose flags is a byte that maintain this
information
• What does : flags |= EXTERNAL | STATIC mean?
• What does : flags &= ~(EXTERNAL | STATIC) mean?
Image manipulations
Bitmap format
• Developed by Microsoft
• Each pixel is represented by RGB
– 3 bytes per pixel
• Each byte value vary from 0-255
– 0- darker, 255-lighter
• Each bmp file has a header
– 54 bytes
Header info
first 14 bytes
typedef struct {
unsigned short int type; /* BMP type identifier */
unsigned int size; /* size of the file in bytes*/
unsigned short int reserved1, reserved2;
unsigned int offset; /* starting address of the byte */
} HEADER;
Binary Files
• Any file is an array of bytes
• Files can be ASCII or binary
• Binary files are read byte by byte
Exercises
• Read a BMP image and find its file size
Header Info
next 40 bytes
The next 40 bytes are reserved for a structure as follows.
typedef struct {
unsigned int size; /* Header size in bytes */
int width,height; /* Width and height in pixels */
unsigned short int planes; /* Number of color planes */
unsigned short int bits; /* Bits per pixel */
unsigned int compression; /* Compression type */
unsigned int imagesize; /* Image size in bytes */
int xresolution,yresolution; /* Pixels per meter */
unsigned int ncolors; /* Number of colors */
unsigned int importantcolors; /* Important colors */
} INFOHEADER;
Exercises
• Read a BMP image and find its length and
width
How bmp images can be manipulated?

512 x 512 image


Application
Dealing with Byte alignments

361x315 image
File size = 342228
3*m*n+54 is 341199
the difference is 1083
Exercises
• Remove red color altogether from an image

• Make a color RGB image BW


– hard
Bit packing
struct {
unsigned leading : 3;
unsigned flag1 : 1;
unsigned flag2 : 1;
trailing : 11;
} flags;
• fields within the struct are not variables
– cannot be used with the address operator (&)

• printf(“The leading field is %d \n”, flags.leading);


Unix File Permissions

• what does > chmod 117 file means?


Code Examples

You might also like