CS107 Spring 2019, Lecture 2 Bits and Bytes; Integer Representations

Total Page:16

File Type:pdf, Size:1020Kb

CS107 Spring 2019, Lecture 2 Bits and Bytes; Integer Representations CS107 Spring 2019, Lecture 2 Bits and Bytes; Integer Representations reading: Bryant & O’Hallaron, Ch. 2.2-2.3 This document is copyright (C) Stanford Computer Science and Nick Troccoli, licensed under Creative Commons Attribution 2.5 License. All rights reserved. Based on slides created by Marty Stepp, Cynthia Lee, Chris Gregg, and others. 1 CS107 Topic 1: How can a computer represent integer numbers? 2 Demo: Unexpected Behavior cp -r /afs/ir/class/cs107/samples/lectures/lect2 . 3 Plan For Today • Bits and Bytes • Hexadecimal • Integer Representations • Unsigned Integers • Break: Announcements • Signed Integers • Casting and Combining Types 4 Plan For Today • Bits and Bytes • Hexadecimal • Integer Representations • Unsigned Integers • Break: Announcements • Signed Integers • Casting and Combining Types 5 0 6 1 7 Bits • Computers are built around the idea of two states: “on” and “off”. Transistors represent this in hardware, and bits represent this in software! 8 One Bit At A Time • We can combine bits, like with base-10 numbers, to represent more data. 8 bits = 1 byte. • Computer memory is just a large array of bytes! It is byte-addressable; you can’t address (store location of) a bit; only a byte. • Computers still fundamentally operate on bits; we have just gotten more creative about how to represent different data as bits! • Images • Audio • Video • Text • And more… 9 Base 10 5 9 3 4 Digits 0-9 (0 to base-1) 10 Base 10 5 9 3 4 tens ones thousandshundreds 11 Base 10 5 9 3 4 tens ones thousandshundreds = 5*1000 + 9*100 + 3*10 + 4*1 12 Base 10 5 9 3 4 103 102 101 100 13 Base 10 5 9 3 4 10X: 3 2 1 0 14 Base 2 1 0 1 1 2X: 3 2 1 0 Digits 0-1 (0 to base-1) 15 Base 2 1 0 1 1 23 22 21 20 16 Base 2 1 0 1 1 eights fours twos ones = 1*8 + 0*4 + 1*2 + 1*1 = 1110 17 Base 2 Most significant bit (MSB) Least significant bit (LSB) 1 0 1 1 eights fours twos ones = 1*8 + 0*4 + 1*2 + 1*1 = 1110 18 Base 10 to Base 2 Question: What is 6 in base 2? • Strategy: • What is the largest power of 2 ≤ 6? 19 Base 10 to Base 2 Question: What is 6 in base 2? • Strategy: • What is the largest power of 2 ≤ 6? 22=4 _0 1_ _ _ 23 22 21 20 20 Base 10 to Base 2 Question: What is 6 in base 2? • Strategy: • What is the largest power of 2 ≤ 6? 22=4 • Now, what is the largest power of 2 ≤ 6 – 22? _0 1_ _ _ 23 22 21 20 21 Base 10 to Base 2 Question: What is 6 in base 2? • Strategy: • What is the largest power of 2 ≤ 6? 22=4 • Now, what is the largest power of 2 ≤ 6 – 22? 21=2 _0 1_ 1_ _ 23 22 21 20 22 Base 10 to Base 2 Question: What is 6 in base 2? • Strategy: • What is the largest power of 2 ≤ 6? 22=4 • Now, what is the largest power of 2 ≤ 6 – 22? 21=2 • 6 – 22 – 21 = 0! _0 1_ 1_ _ 23 22 21 20 23 Base 10 to Base 2 Question: What is 6 in base 2? • Strategy: • What is the largest power of 2 ≤ 6? 22=4 • Now, what is the largest power of 2 ≤ 6 – 22? 21=2 • 6 – 22 – 21 = 0! _0 1_ 1_ 0_ 23 22 21 20 24 Base 10 to Base 2 Question: What is 6 in base 2? • Strategy: • What is the largest power of 2 ≤ 6? 22=4 • Now, what is the largest power of 2 ≤ 6 – 22? 21=2 • 6 – 22 – 21 = 0! _0 1_ 1_ 0_ 23 22 21 20 = 0*8 + 1*4 + 1*2 + 0*1 = 6 25 Practice: Base 2 to Base 10 What is the base-2 value 1010 in base-10? a) 20 (text code: 641180) b) 101 (text code: 642224) c) 10 (text code: 642225) d) 5 (text code: 642226) e) Other (text code: 642227) Respond at pollev.com/nicktroccoli901 or text a code above to 22333. 26 This document is copyright (C) Stanford Computer Science and Nick Troccoli, licensed under Creative Commons Attribution 2.5 License. All rights reserved. Based on slides created by Marty Stepp, Cynthia Lee, Chris Gregg, and others. 27 Practice: Base 10 to Base 2 What is the base-10 value 14 in base 2? a) 1111 (text code: 642232) b) 1110 (text code: 642233) c) 1010 (text code: 642235) d) Other (text code: 642236) Respond at pollev.com/nicktroccoli901 or text a code above to 22333. 28 This document is copyright (C) Stanford Computer Science and Nick Troccoli, licensed under Creative Commons Attribution 2.5 License. All rights reserved. Based on slides created by Marty Stepp, Cynthia Lee, Chris Gregg, and others. 29 Byte Values • What is the minimum and maximum base-10 value a single byte (8 bits) can store? 30 Byte Values • What is the minimum and maximum base-10 value a single byte (8 bits) can store? minimum = 0 maximum = ? 31 Byte Values • What is the minimum and maximum base-10 value a single byte (8 bits) can store? minimum = 0 maximum = ? 11111111 2x: 7 6 5 4 3 2 1 0 32 Byte Values • What is the minimum and maximum base-10 value a single byte (8 bits) can store? minimum = 0 maximum = ? 11111111 2x: 7 6 5 4 3 2 1 0 • Strategy 1: 1*27 + 1*26 + 1*25 + 1*24 + 1*23+ 1*22 + 1*21 + 1*20 = 255 33 Byte Values • What is the minimum and maximum base-10 value a single byte (8 bits) can store? minimum = 0 maximum = 255 11111111 2x: 7 6 5 4 3 2 1 0 • Strategy 1: 1*27 + 1*26 + 1*25 + 1*24 + 1*23+ 1*22 + 1*21 + 1*20 = 255 • Strategy 2: 28 – 1 = 255 34 Multiplying by Base 1453 x 10 = 14530 11012 x 2 = 11010 Key Idea: inserting 0 at the end multiplies by the base! 35 Plan For Today • Bits and Bytes • Hexadecimal • Integer Representations • Unsigned Integers • Break: Announcements • Signed Integers • Casting and Combining Types 36 Hexadecimal • When working with bits, oftentimes we have large numbers with 32 or 64 bits. • Instead, we’ll represent bits in base-16 instead; this is called hexadecimal. 0110 1010 0011 37 Hexadecimal • When working with bits, oftentimes we have large numbers with 32 or 64 bits. • Instead, we’ll represent bits in base-16 instead; this is called hexadecimal. 0110 1010 0011 0-15 0-15 0-15 38 Hexadecimal • When working with bits, oftentimes we have large numbers with 32 or 64 bits. • Instead, we’ll represent bits in base-16 instead; this is called hexadecimal. 0-15 0-15 0-15 Each is a base-16 digit! 39 Hexadecimal • Hexadecimal is base-16, so we need digits for 1-15. How do we do this? 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 40 Hexadecimal 41 Hexadecimal • We distinguish hexadecimal numbers by prefixing them with 0x, and binary numbers with 0b. • E.g. 0xf5 is 0b11110101 0x f 5 1111 0101 42 Practice: Hexadecimal to Binary What is 0x173A in binary? 43 Practice: Hexadecimal to Binary What is 0x173A in binary? 44 Practice: Hexadecimal to Binary What is 0b1111001010110110110011 in hexadecimal? (Hint: start from the right) 45 Practice: Hexadecimal to Binary What is 0b1111001010110110110011 in hexadecimal? (Hint: start from the right) 46 Plan For Today • Bits and Bytes • Hexadecimal • Integer Representations • Unsigned Integers • Break: Announcements • Signed Integers • Casting and Combining Types 47 Number Representations • Unsigned Integers: positive and 0 integers. (e.g. 0, 1, 2, … 99999… • Signed Integers: negative, positive and 0 integers. (e.g. …-2, -1, 0, 1,… 9999…) • Floating Point Numbers: real numbers. (e,g. 0.1, -12.2, 1.5x1012) 48 Number Representations • Unsigned Integers: positive and 0 integers. (e.g. 0, 1, 2, … 99999… • Signed Integers: negative, positive and 0 integers. (e.g. …-2, -1, 0, 1,… 9999…) • Floating Point Numbers: real numbers. (e,g. 0.1, -12.2, 1.5x1012) Stay tuned until week 5! 49 32-Bit and 64-Bit • In the early 2000’s, most computers were 32-bit. This means that pointers in programs were 32 bits. • 32-bit pointers could store a memory address from 0 to 232-1, for a total of 232 bytes of addressable memory. This equals 4 Gigabytes, meaning that 32-bit computers could have at most 4GB of memory (RAM)! • Because of this, computers transitioned to 64-bit. This means that pointers in programs were 64 bits. • 64-bit pointers could store a memory address from 0 to 264-1, for a total of 264 bytes of addressable memory. This equals 16 Exabytes, meaning that 64-bit computers could have at most 1024*1024*1024 GB of memory (RAM)! 50 Number Representations 51 Number Representations Myth 52 Plan For Today • Bits and Bytes • Hexadecimal • Integer Representations • Unsigned Integers • Break: Announcements • Signed Integers • Casting and Combining Types 53 Unsigned Integers • An unsigned integer is 0 or a positive integer (no negatives). • We have already discussed converting between decimal and binary, which is a nice 1:1 relationship. Examples: 0b0001 = 1 0b0101 = 5 0b1011 = 11 0b1111 = 15 • The range of an unsigned number is 0 → 2w - 1, where w is the number of bits.
Recommended publications
  • Lab 7: Floating-Point Addition 0.0
    Lab 7: Floating-Point Addition 0.0 Introduction In this lab, you will write a MIPS assembly language function that performs floating-point addition. You will then run your program using PCSpim (just as you did in Lab 6). For testing, you are provided a program that calls your function to compute the value of the mathematical constant e. For those with no assembly language experience, this will be a long lab, so plan your time accordingly. Background You should be familiar with the IEEE 754 Floating-Point Standard, which is described in Section 3.6 of your book. (Hopefully you have read that section carefully!) Here we will be dealing only with single precision floating- point values, which are formatted as follows (this is also described in the “Floating-Point Representation” subsec- tion of Section 3.6 in your book): Sign Exponent (8 bits) Significand (23 bits) 31 30 29 ... 24 23 22 21 ... 0 Remember that the exponent is biased by 127, which means that an exponent of zero is represented by 127 (01111111). The exponent is not encoded using 2s-complement. The significand is always positive, and the sign bit is kept separately. Note that the actual significand is 24 bits long; the first bit is always a 1 and thus does not need to be stored explicitly. This will be important to remember when you write your function! There are several details of IEEE 754 that you will not have to worry about in this lab. For example, the expo- nents 00000000 and 11111111 are reserved for special purposes that are described in your book (representing zero, denormalized numbers and NaNs).
    [Show full text]
  • Create Union Variables Difference Between Unions and Structures
    Union is a user-defined data type similar to a structure in C programming. How to define a union? We use union keyword to define unions. Here's an example: union car { char name[50]; int price; }; The above code defines a user define data type union car. Create union variables When a union is defined, it creates a user-define type. However, no memory is allocated. To allocate memory for a given union type and work with it, we need to create variables. Here's how we create union variables: union car { char name[50]; int price; } car1, car2, *car3; In both cases, union variables car1, car2, and a union pointer car3 of union car type are created. How to access members of a union? We use . to access normal variables of a union. To access pointer variables, we use ->operator. In the above example, price for car1 can be accessed using car1.price price for car3 can be accessed using car3->price Difference between unions and structures Let's take an example to demonstrate the difference between unions and structures: #include <stdio.h> union unionJob { //defining a union char name[32]; float salary; int workerNo; } uJob; struct structJob { char name[32]; float salary; int workerNo; } sJob; main() { printf("size of union = %d bytes", sizeof(uJob)); printf("\nsize of structure = %d bytes", sizeof(sJob)); } Output size of union = 32 size of structure = 40 Why this difference in size of union and structure variables? The size of structure variable is 40 bytes. It's because: size of name[32] is 32 bytes size of salary is 4 bytes size of workerNo is 4 bytes However, the size of union variable is 32 bytes.
    [Show full text]
  • The Hexadecimal Number System and Memory Addressing
    C5537_App C_1107_03/16/2005 APPENDIX C The Hexadecimal Number System and Memory Addressing nderstanding the number system and the coding system that computers use to U store data and communicate with each other is fundamental to understanding how computers work. Early attempts to invent an electronic computing device met with disappointing results as long as inventors tried to use the decimal number sys- tem, with the digits 0–9. Then John Atanasoff proposed using a coding system that expressed everything in terms of different sequences of only two numerals: one repre- sented by the presence of a charge and one represented by the absence of a charge. The numbering system that can be supported by the expression of only two numerals is called base 2, or binary; it was invented by Ada Lovelace many years before, using the numerals 0 and 1. Under Atanasoff’s design, all numbers and other characters would be converted to this binary number system, and all storage, comparisons, and arithmetic would be done using it. Even today, this is one of the basic principles of computers. Every character or number entered into a computer is first converted into a series of 0s and 1s. Many coding schemes and techniques have been invented to manipulate these 0s and 1s, called bits for binary digits. The most widespread binary coding scheme for microcomputers, which is recog- nized as the microcomputer standard, is called ASCII (American Standard Code for Information Interchange). (Appendix B lists the binary code for the basic 127- character set.) In ASCII, each character is assigned an 8-bit code called a byte.
    [Show full text]
  • POINTER (IN C/C++) What Is a Pointer?
    POINTER (IN C/C++) What is a pointer? Variable in a program is something with a name, the value of which can vary. The way the compiler and linker handles this is that it assigns a specific block of memory within the computer to hold the value of that variable. • The left side is the value in memory. • The right side is the address of that memory Dereferencing: • int bar = *foo_ptr; • *foo_ptr = 42; // set foo to 42 which is also effect bar = 42 • To dereference ted, go to memory address of 1776, the value contain in that is 25 which is what we need. Differences between & and * & is the reference operator and can be read as "address of“ * is the dereference operator and can be read as "value pointed by" A variable referenced with & can be dereferenced with *. • Andy = 25; • Ted = &andy; All expressions below are true: • andy == 25 // true • &andy == 1776 // true • ted == 1776 // true • *ted == 25 // true How to declare pointer? • Type + “*” + name of variable. • Example: int * number; • char * c; • • number or c is a variable is called a pointer variable How to use pointer? • int foo; • int *foo_ptr = &foo; • foo_ptr is declared as a pointer to int. We have initialized it to point to foo. • foo occupies some memory. Its location in memory is called its address. &foo is the address of foo Assignment and pointer: • int *foo_pr = 5; // wrong • int foo = 5; • int *foo_pr = &foo; // correct way Change the pointer to the next memory block: • int foo = 5; • int *foo_pr = &foo; • foo_pr ++; Pointer arithmetics • char *mychar; // sizeof 1 byte • short *myshort; // sizeof 2 bytes • long *mylong; // sizeof 4 byts • mychar++; // increase by 1 byte • myshort++; // increase by 2 bytes • mylong++; // increase by 4 bytes Increase pointer is different from increase the dereference • *P++; // unary operation: go to the address of the pointer then increase its address and return a value • (*P)++; // get the value from the address of p then increase the value by 1 Arrays: • int array[] = {45,46,47}; • we can call the first element in the array by saying: *array or array[0].
    [Show full text]
  • Data Structures, Buffers, and Interprocess Communication
    Data Structures, Buffers, and Interprocess Communication We’ve looked at several examples of interprocess communication involving the transfer of data from one process to another process. We know of three mechanisms that can be used for this transfer: - Files - Shared Memory - Message Passing The act of transferring data involves one process writing or sending a buffer, and another reading or receiving a buffer. Most of you seem to be getting the basic idea of sending and receiving data for IPC… it’s a lot like reading and writing to a file or stdin and stdout. What seems to be a little confusing though is HOW that data gets copied to a buffer for transmission, and HOW data gets copied out of a buffer after transmission. First… let’s look at a piece of data. typedef struct { char ticker[TICKER_SIZE]; double price; } item; . item next; . The data we want to focus on is “next”. “next” is an object of type “item”. “next” occupies memory in the process. What we’d like to do is send “next” from processA to processB via some kind of IPC. IPC Using File Streams If we were going to use good old C++ filestreams as the IPC mechanism, our code would look something like this to write the file: // processA is the sender… ofstream out; out.open(“myipcfile”); item next; strcpy(next.ticker,”ABC”); next.price = 55; out << next.ticker << “ “ << next.price << endl; out.close(); Notice that we didn’t do this: out << next << endl; Why? Because the “<<” operator doesn’t know what to do with an object of type “item”.
    [Show full text]
  • Subtyping Recursive Types
    ACM Transactions on Programming Languages and Systems, 15(4), pp. 575-631, 1993. Subtyping Recursive Types Roberto M. Amadio1 Luca Cardelli CNRS-CRIN, Nancy DEC, Systems Research Center Abstract We investigate the interactions of subtyping and recursive types, in a simply typed λ-calculus. The two fundamental questions here are whether two (recursive) types are in the subtype relation, and whether a term has a type. To address the first question, we relate various definitions of type equivalence and subtyping that are induced by a model, an ordering on infinite trees, an algorithm, and a set of type rules. We show soundness and completeness between the rules, the algorithm, and the tree semantics. We also prove soundness and a restricted form of completeness for the model. To address the second question, we show that to every pair of types in the subtype relation we can associate a term whose denotation is the uniquely determined coercion map between the two types. Moreover, we derive an algorithm that, when given a term with implicit coercions, can infer its least type whenever possible. 1This author's work has been supported in part by Digital Equipment Corporation and in part by the Stanford-CNR Collaboration Project. Page 1 Contents 1. Introduction 1.1 Types 1.2 Subtypes 1.3 Equality of Recursive Types 1.4 Subtyping of Recursive Types 1.5 Algorithm outline 1.6 Formal development 2. A Simply Typed λ-calculus with Recursive Types 2.1 Types 2.2 Terms 2.3 Equations 3. Tree Ordering 3.1 Subtyping Non-recursive Types 3.2 Folding and Unfolding 3.3 Tree Expansion 3.4 Finite Approximations 4.
    [Show full text]
  • Bits, Bytes and Integers ‘
    Bits, Bytes and Integers ‘- Karthik Dantu Ethan Blanton Computer Science and Engineering University at Buffalo [email protected] 1 Karthik Dantu Administrivia • PA1 due this Friday – test early and often! We cannot help everyone on Friday! Don’t expect answers on Piazza into the night and early morning • Avoid using actual numbers (80, 24 etc.) – use macros! • Lab this week is on testing ‘- • Programming best practices • Lab Exam – four students have already failed class! Lab exams are EXAMS – no using the Internet, submitting solutions from dorm, home Please don’t give code/exam to friends – we will know! 2 Karthik Dantu Everything is Bits • Each bit is 0 or 1 • By encoding/interpreting sets of bits in various ways Computers determine what to do (instructions) … and represent and manipulate numbers, sets, strings, etc… • Why bits? Electronic Implementation‘- Easy to store with bistable elements Reliably transmitted on noisy and inaccurate wires 0 1 0 1.1V 0.9V 0.2V 0.0V 3 Karthik Dantu Memory as Bytes • To the computer, memory is just bytes • Computer doesn’t know data types • Modern processor can only manipulate: Integers (Maybe only single bits) Maybe floating point numbers ‘- … repeat ! • Everything else is in software 4 Karthik Dantu Reminder: Computer Architecture ‘- 5 Karthik Dantu Buses • Each bus has a width, which is literally the number of wires it has • Each wire transmits one bit per transfer • Each bus transfer is of that width, though some bits might be ignored • Therefore, memory has a word size from‘-the viewpoint of
    [Show full text]
  • A Variable Precision Hardware Acceleration for Scientific Computing Andrea Bocco
    A variable precision hardware acceleration for scientific computing Andrea Bocco To cite this version: Andrea Bocco. A variable precision hardware acceleration for scientific computing. Discrete Mathe- matics [cs.DM]. Université de Lyon, 2020. English. NNT : 2020LYSEI065. tel-03102749 HAL Id: tel-03102749 https://tel.archives-ouvertes.fr/tel-03102749 Submitted on 7 Jan 2021 HAL is a multi-disciplinary open access L’archive ouverte pluridisciplinaire HAL, est archive for the deposit and dissemination of sci- destinée au dépôt et à la diffusion de documents entific research documents, whether they are pub- scientifiques de niveau recherche, publiés ou non, lished or not. The documents may come from émanant des établissements d’enseignement et de teaching and research institutions in France or recherche français ou étrangers, des laboratoires abroad, or from public or private research centers. publics ou privés. N°d’ordre NNT : 2020LYSEI065 THÈSE de DOCTORAT DE L’UNIVERSITÉ DE LYON Opérée au sein de : CEA Grenoble Ecole Doctorale InfoMaths EDA N17° 512 (Informatique Mathématique) Spécialité de doctorat :Informatique Soutenue publiquement le 29/07/2020, par : Andrea Bocco A variable precision hardware acceleration for scientific computing Devant le jury composé de : Frédéric Pétrot Président et Rapporteur Professeur des Universités, TIMA, Grenoble, France Marc Dumas Rapporteur Professeur des Universités, École Normale Supérieure de Lyon, France Nathalie Revol Examinatrice Docteure, École Normale Supérieure de Lyon, France Fabrizio Ferrandi Examinateur Professeur associé, Politecnico di Milano, Italie Florent de Dinechin Directeur de thèse Professeur des Universités, INSA Lyon, France Yves Durand Co-directeur de thèse Docteur, CEA Grenoble, France Cette thèse est accessible à l'adresse : http://theses.insa-lyon.fr/publication/2020LYSEI065/these.pdf © [A.
    [Show full text]
  • Fixed-Size Integer Types Bit Manipulation Integer Types
    SISTEMI EMBEDDED AA 2012/2013 Fixed-size integer types Bit Manipulation Integer types • 2 basic integer types: char, int • and some type-specifiers: – sign: signed, unsigned – size: short, long • The actual size of an integer type depends on the compiler implementation – sizeof(type) returns the size (in number of bytes) used to represent the type argument – sizeof(char) ≤ sizeof(short) ≤ sizeof(int) ≤ sizeof(long)... ≤ sizeof(long long) Fixed-size integers (1) • In embedded system programming integer size is important – Controlling minimum and maximum values that can be stored in a variable – Increasing efficiency in memory utilization – Managing peripheral registers • To increase software portability, fixed-size integer types can be defined in a header file using the typedef keyword Fixed-size integers (2) • C99 update of the ISO C standard defines a set of standard names for signed and unsigned fixed-size integer types – 8-bit: int8_t, uint8_t – 16-bit: int16_t, uint16_t – 32-bit: int32_t, uint32_t – 64-bit: int64_t, uint64_t • These types are defined in the library header file stdint.h Fixed-size integers (3) • Altera HAL provides the header file alt_types.h with definition of fixed-size integer types: typedef signed char alt_8; typedef unsigned char alt_u8; typedef signed short alt_16; typedef unsigned short alt_u16; typedef signed long alt_32; typedef unsigned long alt_u32; typedef long long alt_64; typedef unsigned long long alt_u64; Logical operators • Integer data can be interpreted as logical values in conditions (if, while,
    [Show full text]
  • Advanced Programming Techniques (Amazing C++) Bartosz Mindur Applied Physics and Computer Science Summer School '20
    Advanced Programming Techniques (Amazing C++) Bartosz Mindur Applied Physics and Computer Science Summer School '20 Kraków, 2020-07-16 [1 / 37] www.menti.com/28f8u5o5xr Which programming language do you use the most? cpp h s a b python a c v a y j csharp l b m e s s a 18 [2 / 37] Agenda References C++ history C++11/14 - must be used C++17 - should be used C++20 - may (eventually) be used ... [3 / 37] www.menti.com/uaw75janh7 What is your current knowledge of C++? Core C++ 3.1 C++ STL ! e k e 2.2 i l n o d o N C++ 11/14 G 2.4 C++17 1.4 17 [4 / 37] References and tools [5 / 37] C++ links and cool stu C++ links Online tools ISO C++ Compiler Explorer cpp references cpp insights c & cpp programming cpp.sh #include <C++> repl.it LernCpp.com Quick Bench cplusplus.com Online GDB CppCon piaza.io CppCast codiva.io Bartek Filipek ... Oine tools CMake Valgrind GDB Docker Clang Static Analyzer [6 / 37] Things you (probably) already know well [7 / 37] C++ basics variables conversion and casts references implicit pointers explicit functions static statements dynamic loops exceptions declaration function templates initialization class templates operator overloading smart pointers classes basics of the STL constructors & destructor containers fields iterators methods algorithms inheritance building programs types compilation virtual functions linking polymorphism libraries multiple inheritance tools [8 / 37] www.menti.com/32rn4èy3j What is the most important C++ feature? polymorphism templates encapsulation s r e t n i e inheritance o c p n a s w hardware accessibility i e r e s g s n multithreading i a l generic programming c 8 [9 / 37] C++ history [10 / 37] The Design of C++ The Design of C++, a lecture by Bjarne Stroustrup This video has been recorded in March, 1994 [link] The Design of C++ , lecture by Bjarne Stroustr… Do obejrze… Udostępnij [11 / 37] C++ Timeline [link] [12 / 37] C++11/C++14 [13 / 37] Move semantics Value categories (simplied) Special members lvalue T::T(const T&& other) or T::T(T&& other) T& operator=(T&& other) e.g.
    [Show full text]
  • Malloc & Sizeof
    malloc & sizeof (pages 383-387 from Chapter 17) 1 Overview Whenever you declare a variable in C, you are effectively reserving one or more locations in the computerʼs memory to contain values that will be stored in that variable. The C compiler automatically allocates the correct amount of storage for the variable. In some cases, the size of the variable may not be known until run-time, such as in the case of where the user enters how many data items will be entered, or when data from a file of unknown size will be read in. The functions malloc and calloc allow the program to dynamically allocate memory as needed as the program is executing. 2 calloc and malloc The function calloc takes two arguments that specify the number of elements to be reserved, and the size of each element in bytes. The function returns a pointer to the beginning of the allocated storage area in memory, and the storage area is automatically set to 0. The function malloc works similarly, except that it takes only a single argument – the total number of bytes of storage to allocate, and also doesnʼt automatically set the storage area to 0. These functions are declared in the standard header file <stdlib.h>, which should be included in your program whenever you want to use these routines. 3 The sizeof Operator To determine the size of data elements to be reserved by calloc or malloc in a machine-independent way, the sizeof operator should be used. The sizeof operator returns the size of the specified item in bytes.
    [Show full text]
  • Mallocsample from Your SVN Repository
    DYNAMIC MEMORY ALLOCATION IN C CSSE 120—Rose Hulman Institute of Technology Final Exam Facts Date: Monday, May 24, 2010 Time: 6 p.m. to 10 p.m. Venue: O167 or O169 (your choice) Organization: A paper part and a computer part, similar to the first 2 exams. The paper part will emphasize both C and Python. You may bring two double-sided sheets of paper this time. There will be a portion in which we will ask you to compare and contrast C and Python language features and properties. The computer part will be in C. The computer part will be worth approximately 65% of the total. Q1-2 Sample Project for Today Check out 29-MallocSample from your SVN Repository Verify that it runs, get help if it doesn't Don’t worry about its code yet; we’ll examine it together soon. Memory Requirements Any variable requires a certain amount of memory. Primitives, such an int, double, and char, typically may require between 1 and 8 bytes, depending on the desired precision, architecture, and Operating System’s support. Complex variables such as structs, arrays, and strings typically require as many bytes as their components. How large is this? sizeof operator gives the number bytes needed to store a value typedef struct { sizeof(char) char* name; int year; sizeof(char*) double gpa; sizeof(int) } student; sizeof(float) sizeof(double) char* firstName; int terms; sizeof(student) double scores; sizeof(jose) student jose; printf("size of char is %d bytes.\n", sizeof(char)); Examine the beginning of main of 29-MallocSample.
    [Show full text]