CS208 Introduction to Computer Systems Wednesday, 24 January 2024 + Exam prep - In-class exam, Monday, January 29 - Closed-everything-except-your-brain (no calculator, no notes) - General topics - data representation - C - My philosophy of in-class exams - Stuff that I want you to have in your head, not just your notes - Mostly "what" and "how", only a little bit of "why" - No tricks - I try not to make it long (occasionally, I screw this up, but mostly not) - I indicate what I think is most important via classroom topics, homework assignments, sample programs, and the quiz - What to study - homework assignments - quiz - sample code - class notes - backup reference material as needed: textbook readings - Types of questions - Short answers - Here's some code; what's the output? - Write this tiny amount of code to do X (never more than 3-4 lines) - That memory grid from the quiz - Wildcard (I reserve the right to come up with a different type of question, but see philosophy above) - Integers - binary/decimal/hexadecimal notation (octal, though important, will not be on the exam) - two's complement representation - byte order (little-endian vs. big-endian) - Characters - difference between characters and C char - codepoints vs. encodings - ASCII (chart will be provided) - UTF-8 encoding (chart will be provided) - UTF-16 BE and UTF-16 LE - [General C advice: You can write your own experimental programs to see what happens when you do this or that] - C types - int vs. long (32-bit vs. 64-bit) - char *p vs. char p[10] - string literals: "Hello" - char literals: 'A', '\0', '\\', '\'' - sizeof (don't confuse with strlen!) - C I/O (input/output) - printf, %c, %s, %d, %x, %X, %p - fgets (including what if line is longer than buffer?) - Null-terminated char strings - strlen - strcpy vs. strncpy (including what if source is longer than buffer in strncpy) - strcmp - printf %s vs. %p - C pointers - & as unary "address-of" operator - * in type declarations - * as unary operator for dereferencing - assignment statements with pointers - C bitwise operators - ~ (not) - & (and) - | (or) - ^ (exclusive or, also known as xor) - C stuff that's pretty much the same as Java - if, else - &&, ||, ! - while, for - {}, () - +, -, / (int div), % - function signatures ====== + Questions about program or quiz + That quiz memory grid - How big are things? - Where are they? - When are we talking about the address as itself and when about the thing it points to? - What does printf do and expect in various contexts? + Misc: copying bits, sign extension, etc. - What happens when you do this? char ch = 0xC3; printf("0x%x\n", ch); - Converting from argv[x] or other char * to int strtoul atoi atol - What happens when you do this? int x = -1; unsigned int y = x; - What happens when you do this? char a = 0xC3; char b = 0x41; int x = a; int y = b; - What happens when you do this? unsigned char a = 0xC3; unsigned char b = 0x41; unsigned int x = a; unsigned int y = b; - What happens when you do this? char a = 0xC3; char b = 0x41; unsigned int x = a; unsigned int y = b; + Byte order in practice - integers1.c int k = 123456 printf("%d", k); versus fwrite(&k, sizeof(int), 1, stdout);