Sie sind auf Seite 1von 35

CS110: Data Types in C

Lecture 8
V. Kamakoti
20th January 2008
Datatypes
Types of Data you can use in C without
explicit definition by the user
Arithmetic
Integer domain
Real domain
Strings
Length one - character
Length greater than one - array of characters
Sequence of characters
Todays Lecture Contents

Built-in Types in C
You can define your own data types
Construct called typedef
Later in this course
User defined data type
Creative Problem
Built-in Data types
int
char
float
double
Sizes of each vary depending on
Architecture and compiler
Variations
int
signed, unsigned, long, short
float
single and double precision
Size of short int less than or equal to just
int which is less than or equal to long int
The builtin function sizeof() shall return the
size of the types.
Example Program
#include <stdio.h>
/* Program to print sizeof all datatypes */
main() {
printf("sizeof int is %d\n",sizeof(int));
printf("sizeof short int is %d\n",sizeof(short int));
printf("sizeof long int is %d\n",sizeof(long int));
printf("sizeof unsigned is %d\n",sizeof(unsigned));
printf("sizeof short unsigned is %d\n",sizeof(short unsigned));
printf("sizeof long unsigned is %d\n",sizeof(long unsigned));
printf("sizeof float is %d\n",sizeof(float));
printf("sizeof double is %d\n",sizeof(double));
}
Output
Apple I Mac system - Intel Core 2 Duo
Architecture
Compiler gcc-4.0.1 version
sizeof int is 4
sizeof short int is 2
sizeof long int is 4
sizeof unsigned is 4
sizeof short unsigned is 2
sizeof long unsigned is 4
sizeof float is 4
sizeof double is 8
What does this mean?
int i; // Allocated to memory 0x1000
It has 4 bytes
B3,B2,B1,B0
B3 is most significant byte 0x1003
B0 is least significant byte stored in 0x1000
B1 is stored in 0x1001
B2 is stored in 0x1002
This is called little-endian storage - Intel
machines use this
What does this mean?
int i; // Allocated to memory 0x1000
It has 4 bytes
B3,B2,B1,B0
B3 is most significant byte 0x1000
B0 is least significant byte stored in 0x1003
B1 is stored in 0x1002
B2 is stored in 0x1001
This is called big-endian storage - SUN
processors - Sparc use this
Constants in C
Remember the #define PI in the Area of the
circle problem?
That was a real constant
0, 1, 245, 623, 987 - are decimals
0, 01, 0245, 0623 - are octals
Begin with a 0
So 125 is not equal to 0125
0987 is illegal - why?
0x0, 0x1, 0xABCD - are hexadecimals
0X0, 0X1, 0XABCD - are also correct way of
representing them.
Wrong ways for integer constants
12,245
no comma to enhance readability
36.0
no dots //Not integer constant
10 20 30
no space in between
123-45-6789
no hyphen to enhance readability
0900
not decimal
Wrong ways for octal constants
743
Should start with 0
05280
Illegal digit 8
0777.77
No dots allowed for octal integers
Unsigned and Long Integer
Constants
50000U - decimal unsigned
123456789L - decimal long
123456789UL - decimal unsigned long
0123456L - octal long
0777777U - octal unsigned
0x5000ABCU - hexa unsigned
0XFFFFFUL - hexa unsigned long
Floating Point Constants
3X 105 3 X 105
300000. 30E4
3e5 30.E+4
3e+5 300e3
3E5 .
3.0e+
.3e6
0.3E6
Floating Point Constants
5.026 X 10-17
5.026E-17
.5026E-16
50.26E-18
.0005026E-13

Beware: Underflows and Overflows because of


Finite precision arithmetic
Character Constants
ASCII code - introduced
A is an example
a1 is wrong
sizeof(char) is 1 byte
Declared as char c;
Then assign as
c = A //Only single quotes
Escape Sequences
\n - Line feed
\t - Tab
\r carriage return
Where do you use?
Get an apostrophe \
Double quote \
\0 is the null character
ASCII values
char c;
c = A;
c = \101; //Octal of 65
c = \x41; //Hexa of 65
c = \X41;
All are same. The ASCII value of
character c is decimal 65
Symbolic Constants
Those that are defined using
#define

Remember the PI in your Area of the


circle program.
Statements
Simple and compound statements
Expression and control statements
if (condition) S1 else S2 - Control
a = b+c; expression
{
pi = 3.141593;
area = pi * radius * radius;
} // A compound statement
Test Your Understanding
Which of the following are not valid identifiers
record1
1record
$tax
file_3
File_3
return
Name_and_address
Name-and-address
Test Your Understanding
Which of the following are not valid identifiers
record1
1record
$tax
file_3
File_3
return
Name_and_address
Name-and-address
Test Your Understanding
Which of the following is not a ANSI C
language keyword?
void
enum
goto
function
Test Your Understanding
Which of the following is not a ANSI C
language keyword?
void
enum
goto
function
Test Your Understanding
What will be the result of the following
program if the inputs are 2 and 3
main() {
float a,b;
scanf(%d %d,&a,&b);
printf(%f %f,a,b);
}
Test Your Understanding
main() {
float a,b;
scanf(%d %d,&a,&b);
printf(%f %f,a,b);
}

Ans: It compiles without any problem. It will be


garbage. What does this tell?
Test Your Understanding
main() {
float a,b;
scanf(%d %d,&a,&b);
printf(%f %f,a,b);
}

Ans: The compiler only catches some type of bugs. You


have to take much care. Just because your program
compiled without errors/warning, you are not
guaranteed of correct results.
Test Your Understanding
What will be the result of the following
program if the inputs are 2 and 3
main() {
int a,b;
scanf(%d %d,&a,&b);
printf(%f %f,a,b);
}
Test Your Understanding
Junk will be printed for this too.
main() {
int a,b;
scanf(%d %d,&a,&b);
printf(%f %f,a,b);
}
Test Your Understanding
What will be the result of the following
program
main() {
int a,b;
a = 10; b = 20;
printf(%d ,a,b);
}
Test Your Understanding
It shall print 10
main() {
int a,b;
a = 10; b = 20;
printf(%d ,a,b);
}
Conclusion
Compilers do not catch most of your
bugs
Reasons are many
Attend the 5th semester Language
Translator BTech Core course in CSE Dept
You train yourself to be a CAREFUL
PROGRAMMER
Creative Problem
Suppose you are using a program that
reads in a large English text file as input
and processes it. The program for some
reason does not like a set of words and
whenever it sees the same in your text
file it halts and outputs Error. It is so
angry that it does not say what the word
is and which line it occurred or any
other info.
Creative Problem
You do not have a list of offending
words. Devise a strategy to identify the
first offending word in your text. Express
the efficiency of your strategy in terms
of the number of words in the input text
file.
Thank You
SAARANG Time :-)
Do not go home - it is your festival
No lab this week
People who have pending work to be done
can visit labs on Monday and Tuesday to
finish backlogs.
Lab exercises 1 and 2
Grades to be finalized this week.

Das könnte Ihnen auch gefallen