CIS 2107 Computer Systems and Low-Level Programming Fall 2011 Midterm Solutions

Similar documents
CIS 2107 Computer Systems and Low-Level Programming Fall 2011 Midterm

CIS 2107 Computer Systems and Low-Level Programming Fall 2010 Midterm

CIS 2107 Computer Systems and Low-Level Programming Spring 2012 Final

COMP2611: Computer Organization. Data Representation

Portland State University. CS201 Section 5. Midterm Exam. Fall 2018

CS 265. Computer Architecture. Wei Lu, Ph.D., P.Eng.

211: Computer Architecture Summer 2016

Chapter 03: Computer Arithmetic. Lesson 09: Arithmetic using floating point numbers

ECE264 Fall 2013 Exam 3, November 20, 2013

Do not start the test until instructed to do so!

Number Systems. Binary Numbers. Appendix. Decimal notation represents numbers as powers of 10, for example

CS , Fall 2001 Exam 1

CS61, Fall 2012 Midterm Review Section

10.1. Unit 10. Signed Representation Systems Binary Arithmetic

Floating-point Arithmetic. where you sum up the integer to the left of the decimal point and the fraction to the right.

MIDTERM EXAM. CS 217 October 28, Name: Precept: Honor Code: Score: Problem Score Max

Computer Systems Programming. Practice Midterm. Name:

15213 Recitation 2: Floating Point

Chapter 4: Data Representations

Contents of Lecture 3

Section Notes - Week 1 (9/17)

A Fast Review of C Essentials Part I

CS 33. Data Representation, Part 2. CS33 Intro to Computer Systems VIII 1 Copyright 2017 Thomas W. Doeppner. All rights reserved.

Inf2C - Computer Systems Lecture 2 Data Representation

Computer Organization & Systems Exam I Example Questions

Problem 2 Add the two 2 s complement signed 8-bit values given below, and express your answer in decimal.

COSC 243. Data Representation 3. Lecture 3 - Data Representation 3 1. COSC 243 (Computer Architecture)

Question 4: a. We want to store a binary encoding of the 150 original Pokemon. How many bits do we need to use?

CS101 Lecture 04: Binary Arithmetic

CS , Fall 2002 Exam 1

The type of all data used in a C (or C++) program must be specified

CMSC 313 Fall2009 Midterm Exam 1 Section 01 October 12, 2009

Declaration. Fundamental Data Types. Modifying the Basic Types. Basic Data Types. All variables must be declared before being used.

CS 33. Data Representation (Part 3) CS33 Intro to Computer Systems VIII 1 Copyright 2018 Thomas W. Doeppner. All rights reserved.

Sample Examination. Family Name:... Other Names:... Signature:... Student Number:...

COMP2121: Microprocessors and Interfacing. Number Systems

CS 261 Fall Floating-Point Numbers. Mike Lam, Professor.

C mini reference. 5 Binary numbers 12

Signed umbers. Sign/Magnitude otation

CS 261 Fall Floating-Point Numbers. Mike Lam, Professor.

Programming in C Quick Start! Biostatistics 615 Lecture 4

Computer Architecture and System Software Lecture 02: Overview of Computer Systems & Start of Chapter 2

Chapter 3: Arithmetic for Computers

Number Systems. Decimal numbers. Binary numbers. Chapter 1 <1> 8's column. 1000's column. 2's column. 4's column

EECS 213 Fall 2007 Midterm Exam

Midterm Exam Review Slides

Tutorial 1: C-Language

Survey. Motivation 29.5 / 40 class is required

COMP1917 Computing 1 Written Exam Sample Questions

M1 Computers and Data

Dynamic Memory Allocation and Command-line Arguments

The type of all data used in a C++ program must be specified

Chapter 7. Basic Types

unused unused unused unused unused unused

ECE 250 / CS 250 Computer Architecture. C to Binary: Memory & Data Representations. Benjamin Lee

l l l l l l l Base 2; each digit is 0 or 1 l Each bit in place i has value 2 i l Binary representation is used in computers

C for Java Programmers 1. Last Week. Overview of the differences between C and Java. The C language (keywords, types, functies, etc.

We would like to find the value of the right-hand side of this equation. We know that

Exercise Session 2 Simon Gerber

Floating Point. The World is Not Just Integers. Programming languages support numbers with fraction

Representing and Manipulating Integers. Jo, Heeseung

Department of Electrical Engineering and Computer Sciences Spring 2007 Instructor: Dr. Dan Garcia

Computer Science 324 Computer Architecture Mount Holyoke College Fall Topic Notes: Bits and Bytes and Numbers

CPS 104 Computer Organization and Programming Lecture-2 : Data representations,

Bits, Bytes, and Integers Part 2

Computer Science Foundation Exam

C BOOTCAMP DAY 2. CS3600, Northeastern University. Alan Mislove. Slides adapted from Anandha Gopalan s CS132 course at Univ.

Representing Integers. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

Programming Studio #1 ECE 190

Number Systems for Computers. Outline of Introduction. Binary, Octal and Hexadecimal numbers. Issues for Binary Representation of Numbers

CSE 351: The Hardware/Software Interface. Section 2 Integer representations, two s complement, and bitwise operators

Number Systems. Both numbers are positive

C Programming Language. Microcomputer Architecture and Interfacing Colorado School of Mines Professor William Hoff

Representing Integers

Computer (Literacy) Skills. Number representations and memory. Lubomír Bulej KDSS MFF UK

CS 33. Data Representation, Part 2. CS33 Intro to Computer Systems VII 1 Copyright 2018 Thomas W. Doeppner. All rights reserved.

Week 3 Lecture 2. Types Constants and Variables

ICS Instructor: Aleksandar Kuzmanovic TA: Ionut Trestian Recitation 2

Programming Studio #1 ECE 190

Jin-Soo Kim Systems Software & Architecture Lab. Seoul National University. Integers. Spring 2019

16.216: ECE Application Programming Spring 2015 Exam 3 Solution

INTEGER REPRESENTATIONS

Introduction to Computers and Programming. Numeric Values

Groups of two-state devices are used to represent data in a computer. In general, we say the states are either: high/low, on/off, 1/0,...

Binary representation of integer numbers Operations on bits

ECE331: Hardware Organization and Design

Floating Point Puzzles. Lecture 3B Floating Point. IEEE Floating Point. Fractional Binary Numbers. Topics. IEEE Standard 754

Floating Point Arithmetic

CS Programming In C

THE FUNDAMENTAL DATA TYPES

ECE 372 Microcontroller Design Assembly Programming Arrays. ECE 372 Microcontroller Design Assembly Programming Arrays

Chapter 2 Bits, Data Types, and Operations

CS & IT Conversions. Magnitude 10,000 1,

COMP Overview of Tutorial #2

Number Systems Prof. Indranil Sen Gupta Dept. of Computer Science & Engg. Indian Institute of Technology Kharagpur Number Representation

IT 1204 Section 2.0. Data Representation and Arithmetic. 2009, University of Colombo School of Computing 1

advanced data types (2) typedef. today advanced data types (3) enum. mon 23 sep 2002 defining your own types using typedef

CS , Spring 2004 Exam 1

ESC101N: Fundamentals of Computing End-sem st semester

Programming refresher and intro to C programming

Transcription:

Fall 2011 Name: Page Points Score 1 7 2 10 3 8 4 13 6 17 7 4 8 16 9 15 10 10 Total: 100 Instructions The exam is closed book, closed notes. You may not use a calculator, cell phone, etc. For each of the questions of this quiz, you can assume the following sizes for C data types: type bytes char 1 short 2 int 4 long 8 float 4 double 8 void* 4 i

For the following questions, you can assume that my home directory is the jfiore directory. 1. Unix shell stuff. jfiore home 2107 stuff.txt... prog.c assign 01 02 files (1 point) (a) If I m in my home directory i.e., /home/jfiore, what command can I type in order to run the C compiler on prog.c, but not the linker? gcc -c prog.c (1 point) (b) If I m in my home directory, what s the one command that I can type in order to create a files directory within the assignment 1 directory? mkdir 2107/assign/01/files (1 point) (c) What command can I type to see a list of all of the files in my current directory? ls (1 point) (d) If I m in my home directory, what s the one command that I can type to move prog.c to the files directory inside assignment 2? mv prog.c 2107/assign/02/files (1 point) (e) If I run the command gcc -E prog.c to run the preprocessor only on prog.c, what does the resulting file contain (i.e., how is it different from prog.c)? Among other things, the #include statements are replaced with the contents of the files included, and the #define statements are processed. 2. Some conversions. (1 point) (a) 104 tbytes =? kbits (1 point) (b) 3 minutes =? microseconds (a) 832,000,000,000 or 104 8 10 (b) 3 60 10 6 1 of 11 question 2 continues...

(1 point) (c) 48 mbytes =? tbytes (1 point) (d) 128 mbytes =? kbits (1 point) (e) 1 hour =? nanoseconds (c) 4.8e-05 or 48/10 6 (d) 1,024,000 or 128*8*1000 (e) 60 60 10 9 3. Convert 246 10 to: (1 point) (a) base 2 246 = 123 2 + 0 123 = 61 2 + 1 61 = 30 2 + 1 30 = 15 2 + 0 15 = 7 2 + 1 7 = 3 2 + 1 3 = 1 2 + 1 1 = 0 2 + 1 246 10 = 11110110 2 (1 point) (b) base 16 246 10 = 11110110 2 = F 6 16 (1 point) (a) 2 31 4. Using the approximation trick that we talked about in class, about how much are each of the following? (1 point) (b) 2 29 (1 point) (c) 2 43 (2 points) 5. What is 111101011 2 + 11101110 2 in base 2? (a) (b) (c) 2 billion 512 million 8 trillion 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 2 + 1 1 1 0 1 1 1 0 2 1 0 1 1 0 1 1 0 0 1 2 out of a possible 10 2 of 11 exam continues...

Which makes sense, because: and 491 10 + 238 10 = 729 10, which is 1011011001 2. (2 points) 6. What is 3967B7 16 + 2E67 16 in base 16? 111101011 2 = 491 10 11101110 2 = 238 10 1 1 3 9 6 7 B 7 16 + 2 E 6 7 16 3 9 9 6 1 E 16 7. data representation. For these questions, please remember to answer in hex, not binary. (1 point) (a) In hex, what is the smallest integer that can be represented by a 16-bit two s complement int? (a) 0x8000 (1 point) (b) In hex, what is the largest integer that can be represented by a 16-bit two s complement int? (1 point) (c) In hex, what is the largest integer that can be represented by a 16-bit unsigned int? (b) 0x7FFF (1 point) (d) In hex, what is 1 as a 16-bit two s complement int? (2 points) 8. What is printed by the following? char x = 50; char signed_prod; unsigned char unsigned_prod; signed_prod = x*3; unsigned_prod = x*3; (c) (d) 0xFFFF 0xFFFF printf("%d\n", signed_prod); printf("%u\n", unsigned_prod); /* recall that %u means to print as unsigned */ -106 150 Why? When we multiply 50 by 3, we get 150, which is stored as 10010110. When we interpret 10010110 as an unsigned decimal value, it s 150 10. When we interpret it as a signed value, it s 106 10. out of a possible 8 3 of 11 exam continues...

9. Some bit operations. If we have char x = 0x53, y = 0xF9;, what is the result of the following operations? Your answer must be in the form of exactly two hex digits 1. solution: The easiest thing to do is to convert to binary first. 0x53=01010011 2 and 0xF9=11111001 2 (1 point) (a) x y (1 point) (b) x y (1 point) (c) x<<2 (1 point) (d) x (1 point) (e) x&0x0f (1 point) (f) x y (1 point) (g) x&&1 (a) (b) (c) (d) (e) (f) (g) 0xFB 0x01 0x4C 0xAC 0x03 0xAA 0x01 (6 points) 10. For this question, we re doing 5-bit two s complement representation of integers. Fill in the empty boxes in the following table. Addition and subtraction should be performed based on the rules for 5-bit, two s complement arithmetic. Recall that in your book s notation, TMin is defined to be the smallest negative two s complement number that we can represent, and TMax is the largest positive one. 1 Ignore the possibility of promotion to 32-bit ints. Behave as though we re living in the land of 8-bit arithmetic. out of a possible 13 4 of 11 exam continues...

Name Decimal Rep. Binary Rep. Zero 0 0 0000 n/a 6 0 0110 n/a 5 1 1011 n/a -5 1 1011 n/a 10 0 1010 TMax 15 0 1111 TMin -16 1 0000 TMin+2-14 1 0010 TMax+2-15 1 0001 11. If I have the following: int main(void) { int a=10; int b=20; int *p=&b; int *q=p; (*p)++; q++; and memory is laid out like this: q 1000 p 1004 b 1008 a 1012 Before the increments, you end up with: q 1000 1008 p 1004 1008 b 1008 20 a 1012 10 (*p)++ increments the value at address 1008, i.e., 20 becomes 21. q++ increments the pointer q, so we have 1008 + (1)(sizeof(int)) = 1008 + (1)(4) = 1012. We get: what do you see if you print: q 1000 1012 p 1004 1008 b 1008 21 a 1012 10 out of a possible 0 5 of 11 question 11 continues...

(1 point) (a) a (1 point) (b) &a (1 point) (c) b (1 point) (d) &b (1 point) (e) p (1 point) (f) *p (1 point) (g) &p (1 point) (h) q (1 point) (i) *q (1 point) (j) &q (a) 10 (b) 1012 (c) 21 (d) 1008 (e) 1008 (f) 21 (g) 1004 (h) 1012 (i) 10 (j) 1000 12. fun with floats (3 points) (a) How would we represent the number 191.6875 10 in fixed-point binary? 191 10 = 10111111 2 0.6875 10 = 0.1011 2 191.6875 10 = 10111111.1011 2 (1 point) (b) Normalize your answer from part (a). 10111111.1011 2 = 1.01111111011 2 7 (3 points) (c) How would 191.6875 10 be stored in a C 32-bit float variable? (Remember that for 32-bit floats, the bias value is 127.) out of a possible 17 6 of 11 exam continues...

sign The number is positive, so the sign bit is 0. exponent We store the biased exponent. The bias is 127, so we have 7 + 127 = 134 10 = 10000110 2. So 10000110 is stored in the exponent field. mantissa We had 1.01111111011 2 7, so in the mantissa field, we store 01111111011 and then pad the remaining bits of the field with 0s. Remember that we have 32-bit floats. 1 bit was used for the sign, 8 bits were used for the exponent. This leaves 32 (1 + 8) = 23 bits for the mantissa. In the mantissa field, we store 01111111011000000000000. So we end up with: sign exponent mantissa 0 10000110 01111111011000000000000 13. Recognizing the value of a floating-point variable. In this question, consider 6-bit floating-point numbers. Two bits are used for the mantissa and 3 bits for the exponent. (1 point) (a) For a 3-bit exponent field, what is the bias? bias = 2 3 1 1 = 2 2 1 = 4 1 = 3 (3 points) (b) What floating-point value does the bit string 0 01 001 represent, where 0 is the sign bit, 01 is the mantissa and 001 is the exponent? Please show all work. the sign bit is 0, so the number is positive the exponent field is 3 bits, so the bias is 2 3 1 1 = 2 2 1 = 4 1 = 3 the exponent field is not all 0s, and it s not all 1s, so it s a normalized number. This means that the mantissa has an implied leading 1., and that the exponent is the value in the exponent field minus the bias. bit repr e E 2 E f M 2 E M V Decimal 0 01 001 1-2 1/4 1/4 5/4 5/16 5/16 0.312500 14. Use the following code to answer the questions. 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 5 typedef struct { 6 int x; 7 int *p; 8 int A[3]; 9 } Stuff; 10 11 void func01(int[]); 12 void func02(char*); 13 void func03(char*); 14 void func04(stuff); 15 16 int main(void) { 17 int A[]={10,20,30}; 18 int i=40; 19 Stuff s; 20 char msg[100]; 21 22 s.x=50; 23 s.p=&i; 24 s.a[0]=60; 25 26 strcpy(msg, "aspirin"); 27 28 func01(a); out of a possible 4 7 of 11 question 14 continues...

29 func02(msg); 30 func03(msg); 31 func04(s); 32 33 return 0; 34 } 35 36 void func01(int A[]) { 37 A[0]++; 38 } 39 40 void func02(char *s) { 41 strcpy(s, "half way there"); 42 } 43 44 void func03(char *s) { 45 s = malloc(10); 46 strcpy(s, "coffee"); 47 } 48 49 void func04(stuff s) { 50 s.x=5555; 51 *(s.p)=4040; 52 s.p=(int*)malloc(sizeof(int)); 53 *(s.p)=4444; 54 s.a[0]=6666; 55 } (1 point) (a) How many bytes are passed to the function func01( )? (1 point) (b) How many bytes are passed to the function func02( )? (1 point) (c) How many bytes are passed to the function func04( )? (a) 4 (b) 4 (c) 20 (1 point) (d) A[0] What is the value of each of the following after func04( ) has been called? (1 point) (e) i (1 point) (f) s.x (1 point) (g) *(s.p) (1 point) (h) s.a[0] (1 point) (i) msg (What s the string?) (d) 11 (e) 4040 (f) 50 (g) 4040 (h) 60 (i) half way there (7 points) 15. Write a function which is passed an int A[ ] of positive integers and A s length. The function returns the largest item in A. Do not use the [ ] operator. out of a possible 16 8 of 11 exam continues...

1 int largest(int A[], int len) { 2 int i; 3 int l; /* largest so far */ 4 int *c; /* current */ 5 6 if (len<=0) 7 return -1; 8 9 c=a; 10 l=*c; 11 c++; 12 for (i=1; i<len; i++, c++) { 13 if (*c>l) 14 l=*c; 15 } 16 return l; 17 } 16. big-endian/little-endian (7 points) (a) Write a function called is big endian( ) which returns 1 if the machine running the function is big endian or 0 otherwise. One possibility: int is_big_endian() { int x = 0xFF; char *p=(char*)&x; } return!((*p)&0xff); (1 point) (b) If we re on a 32-bit little-endian machine and int x has the value 0x01234567, and x is stored starting at address 1000, what is the value of the byte stored at address 1002? If it s little-endian, we d have: so, the answer is 0x23 address value 1000 0x67 1001 0x45 1002 0x23 1003 0x01 (7 points) 17. Write a function caps( ) which is passed a string s. The function returns a copy of s, but with the first letter of each word capitalized. If s is NULL or if an error is encountered, the function returns NULL. It is up to the caller to free any memory allocated by caps( ). out of a possible 15 9 of 11 exam continues...

1 #include <string.h> 2 #include <ctype.h> 3 #include <stdlib.h> 4 5 char *caps(char *s) { 6 int len, i; 7 char *r; 8 9 if ((len=strlen(s))==0) 10 return NULL; 11 12 if ((r=(char*)malloc(len+1))==null) 13 return NULL; 14 15 r[0]=toupper(s[0]); 16 for (i=1; i<len; i++) { 17 if (!isspace(s[i]) && isspace(s[i-1])) 18 r[i]=toupper(s[i]); 19 else 20 r[i]=s[i]; 21 } 22 23 r[i]= \0 ; 24 return r; 25 } (10 points) 18. Write a program which reads text from STDIN until EOF is entered. The program prints the length of the longest word and the longest line in the file. (Be careful. You don t need to print the longest line and longest word just their length.) One possibility: 1 #include <stdio.h> 2 #include <ctype.h> 3 4 #define OUT 0 5 #define IN 1 6 7 int main(void) { 8 int c, /* current character */ 9 l_long_line, /* length of longest line */ 10 l_long_word, /* length of longest word */ 11 l_cur_word, /* length of current word */ 12 l_cur_line, /* length of current line */ 13 state; /* state: in word or out of word? */ 14 15 l_long_line=l_long_word=l_cur_word=l_cur_line=0; 16 state=out; out of a possible 10 10 of 11 question 18 continues...

17 18 while ((c=getchar())!=eof) { 19 if (isspace(c)) { 20 if (state==in) { 21 if (l_cur_word>l_long_word) 22 l_long_word=l_cur_word; 23 state=out; 24 l_cur_word=0; 25 } 26 if (c== \n ) { 27 if (l_cur_line>l_long_line) { 28 l_long_line=l_cur_line; 29 } 30 l_cur_line=-1; 31 } 32 } else { /* we didn t read a space */ 33 if (state==out) { 34 state=in; 35 l_cur_word=1; 36 } else 37 l_cur_word++; 38 } 39 l_cur_line++; 40 } 41 42 printf("length of: longest line = %d, longest word = %d\n", 43 l_long_line, l_long_word); 44 return 0; 45 } 11 of 11 end of exam