Bits, Bytes, and Integers Binary Representations Encoding Byte

Total Page:16

File Type:pdf, Size:1020Kb

Bits, Bytes, and Integers Binary Representations Encoding Byte Binary Representations Bits, Bytes, and Integers 0 1 0 3.3V CSci 2021: Machine Architecture and Organization Lectures #2-4, January 23rd-28th, 2015 2.8V Your instructor: Stephen McCamant 0.5V 0.0V Based on slides originally by: Randy Bryant, Dave O’Hallaron, Antonia Zhai 1 2 Encoding Byte Values Byte-Oriented Memory Organization Byte = 8 bits . Binary 000000002 to 111111112 0 0 0000 • • • . Decimal: 010 to 25510 1 1 0001 2 2 0010 . Hexadecimal 0016 to FF16 3 3 0011 4 4 0100 . Base 16 number representation Programs Refer to Virtual Addresses 5 5 0101 . Use characters ‘0’ to ‘9’ and ‘A’ to ‘F’ 6 6 0110 . Conceptually very large array of bytes 7 7 0111 . Write FA1D37B16 in C as 8 8 1000 . Actually implemented with hierarchy of different memory types – 0xFA1D37B 9 9 1001 . System provides address space private to particular “process” A 10 1010 – 0xfa1d37b B 11 1011 . Program being executed C 12 1100 . Program can clobber its own data, but not that of others D 13 1101 E 14 1110 Compiler + Run-Time System Control Allocation F 15 1111 . Where different program objects should be stored . All allocation within single virtual address space 3 4 Machine Words Word-Oriented Memory Organization 32-bit 64-bit Bytes Addr. Machine Has “Word Size” Addresses Specify Byte Words Words . Nominal size of integer-valued data Locations 0000 Addr 0001 . Including addresses . Address of first byte in word = 0000?? 0002 . Most current machines use 32 bits (4 bytes) words . Addresses of successive words differ Addr 0003 . by 4 (32-bit) or 8 (64-bit) = Limits addresses to 4GB 0000?? 0004 . Becoming too small for memory-intensive applications Addr 0005 = . High-end systems use 64 bits (8 bytes) words 0004?? 0006 . Potential address space ≈ 1.8 X 1019 bytes 0007 0008 . x86-64 machines support 48-bit addresses: 256 Terabytes Addr 0009 . = Machines support multiple data formats 0008?? 0010 Addr . Fractions or multiples of word size = 0011 . Always integral number of bytes 0008?? 0012 Addr 0013 = 0012?? 0014 0015 5 6 1 Data Representations Byte Ordering How should bytes within a multi-byte word be ordered in C Data Type Typical 32-bit Intel IA32 x86-64 memory? char 1 1 1 Conventions short 2 2 2 . Big Endian: Sun, PPC Mac, Internet convention int 4 4 4 . Least significant byte has highest address long 4 4 8 . Little Endian: x86, VAX . Least significant byte has lowest address long long 8 8 8 float 4 4 4 double 8 8 8 long double 8 10/12 10/16 pointer 4 4 8 7 8 Byte Ordering Example Reading Byte-Reversed Listings Big Endian Disassembly . Least significant byte has highest address . Text representation of binary machine code Little Endian . Generated by program that reads the machine code . Least significant byte has lowest address Example Fragment Example Address Instruction Code Assembly Rendition . Variable x has 4-byte representation 0x01234567 8048365: 5b pop %ebx 8048366: 81 c3 ab 12 00 00 add $0x12ab,%ebx . Address given by &x is 0x100 804836c: 83 bb 28 00 00 00 00 cmpl $0x0,0x28(%ebx) Deciphering Numbers Big Endian 0x100 0x101 0x102 0x103 . Value: 0x12ab 01 23 45 67 . Pad to 32 bits: 0x000012ab Little Endian 0x100 0x101 0x102 0x103 . Split into bytes: 00 00 12 ab 67 45 23 01 . Reverse: ab 12 00 00 9 10 Examining Data Representations show_bytes Execution Example Code to Print Byte Representation of Data int a = 15213; . Casting pointer to unsigned char * creates byte array printf("int a = 15213;\n"); show_bytes((unsigned char *) &a, sizeof(int)); void show_bytes(unsigned char *start, int len){ int i; for (i = 0; i < len; i++) printf(”%p\t0x%.2x\n",start+i, start[i]); Result (Linux): printf("\n"); } int a = 15213; 0xbffffcb8 0x6d 0xbffffcb9 0x3b 0xbffffcba 0x00 Printf directives: %p: Print pointer 0xbffffcbb 0x00 %x: Print Hexadecimal 11 12 2 Decimal: 15213 Representing Integers Binary: 0011 1011 0110 1101 Representing Pointers Hex: 3 B 6 D int B = -15213; int *P = &B; int A = 15213; long int C = 15213; IA32, x86-64 Sun Sun IA32 x86-64 IA32 x86-64 Sun 6D 00 EF D4 0C 6D 6D 00 3B 00 FF F8 89 3B 3B 00 00 3B FB FF EC 00 00 3B 00 6D 00 00 6D 2C BF FF 00 FF int B = -15213; 00 7F 00 IA32, x86-64 Sun 00 00 93 FF 00 C4 FF FF C4 FF 93 Two’s complement representation Different compilers & machines assign different locations to objects (Covered later) 13 14 Representing Strings Aside: ASCII table char S[6] = "18243"; Strings in C . Represented by array of characters 0 1 2 3 4 5 6 7 8 9 a b c d e f . Each character encoded in ASCII format Linux/Alpha Sun 0x0_ \0 ^A ^B ^C ^D ^E ^F ^G ^H \t \n ^K ^L ^M ^N ^O . Standard 7-bit encoding of character set 31 31 0x1_ ^P ^Q ^R ^S ^T ^U ^V ^W ^X ^Y ^Z ESC FS GS RS US . Character “0” has code 0x30 38 38 0x2_ SPC ! " # $ % & ' ( ) * + , - . / – Digit i has code 0x30+i 32 32 0x3_ 0 1 2 3 4 5 6 7 8 9 : ; < = > ? . String should be null-terminated 34 34 0x4_ @ A B C D E F G H I J K L M N O . Final character = 0 33 33 0x5_ P Q R S T U V W X Y Z [ \ ] ^ _ Compatibility 00 00 0x6_ ` a b c d e f g h I j k l m n o . Byte ordering not an issue 0x7_ p q r s t u v w x y z { | } ~ DEL 15 16 Today: Bits, Bytes, and Integers Homework turn-in process Representing information as bits For full credit: turn in at the beginning of class on the due (Logistics interlude) date . On-time = 3:35pm, or when I start lecturing, whichever is later Bit-level manipulations . Yes, this means you have to come to class on time (that day) Integers We strongly recommend typing your assignments on a . Representation: unsigned and signed computer, not hand-writing . Conversion, casting . Expanding, truncating Late submissions only will be online using the Moodle . Addition, negation, multiplication, shifting Do not turn in paper assignments at other times Summary . This helps us stay organized 17 18 3 2021-dedicated VMs now available Boolean Algebra SSH into: xA-B.cselabs.umn.edu Developed by George Boole in 19th Century . Where A is 21, 22, or 23 . Algebraic representation of logic . And B is 01, 02, 03, 04, or 05 . Encode “True” as 1 and “False” as 0 . E.g., x22-02.cselabs.umn.edu And (math: ∧) Or (math: ∨) 32-bit version of Ubuntu Linux version 14.04 A&B = 1 when both A=1 and B=1 A|B = 1 when either A=1 or B=1 Do not run graphical programs (Firefox, etc.) on these machines (it would be slow anyway) If you prefer to use other CSE Labs Linux machines, give the -m32 option to GCC to get 32-bit binaries Not (math: ¬) Exclusive-Or “xor” (math: ⊕) ~A = 1 when A=0 A^B = 1 when either A=1 or B=1, but not both 19 20 Application of Boolean Algebra General Boolean Algebras Applied to Digital Systems by Claude Shannon Operate on Bit Vectors . 1937 MIT Master’s Thesis . Operations applied bitwise . Reason about networks of relay switches 01101001 01101001 01101001 . Encode closed switch as 1, open switch as 0 & 01010101 | 01010101 ^ 01010101 ~ 01010101 01000001 01111101 00111100 10101010 A&~B Connection when All of the Properties of Boolean Algebra Apply A ~B A&~B | ~A&B ~A B ~A&B = A^B 21 22 Representing & Manipulating Sets Bit-Level Operations in C Representation Operations &, |, ~, ^ Available in C . Width w bit vector represents subsets of {0, …, w–1} . Apply to any “integral” data type . aj = 1 if j ∈ A long, int, short, char, unsigned . View arguments as bit vectors . 01101001 { 0, 3, 5, 6 } . Arguments applied bit-wise . 76543210 Examples (Char data type) . ~0x41 → 0xBE . 01010101 { 0, 2, 4, 6 } . ~010000012 → 101111102 . 76543210 . ~0x00 → 0xFF . ~000000002 → 111111112 Operations . 0x69 & 0x55 → 0x41 . & Intersection 01000001 { 0, 6 } . 011010012 & 010101012 → 010000012 . | Union 01111101 { 0, 2, 3, 4, 5, 6 } . 0x69 | 0x55 → 0x7D . ^ Symmetric difference 00111100 { 2, 3, 4, 5 } . 011010012 | 010101012 → 011111012 . ~ Complement 10101010 { 1, 3, 5, 7 } 23 24 4 Contrast: Logic Operations in C Shift Operations Contrast to Logical Operators Left Shift: x << y Argument x 01100010 . &&, ||, ! . Shift bit-vector x left y positions << 3 00010000 . View 0 as “False” – Throw away extra bits on left Log. >> 2 00011000 . Anything nonzero as “True” . Fill with 0’s on right Arith. >> 2 00011000 . Always return 0 or 1 Right Shift: x >> y . Early termination (AKA “short-circuit evaluation”) . Shift bit-vector x right y positions Examples (char data type) . Throw away extra bits on right Argument x 10100010 . !0x41 → 0x00 . Logical shift << 3 00010000 . !0x00 → 0x01 . Fill with 0’s on left Log. >> 2 00101000 . !!0x41 → 0x01 . Arithmetic shift Arith. >> 2 11101000 . 0x69 && 0x55 → 0x01 . Replicate most significant bit on right . 0x69 || 0x55 → 0x01 Undefined Behavior . p && *p (avoids null pointer access) . Shift amount < 0 or ≥ word size 25 26 Exercise break: flip case Today: Bits, Bytes, and Integers /* Convert lowercase to uppercase and vice-versa, Representing information as bits return any other characters unchanged */ char flip_case(char c){ Bit-level manipulations if (c >= 'A' && c <= 'Z') { /* 0x41 through 0x5A */ Integers return _______________;c | 0x20 } else if (c >= 'a' && c <= 'z') { . Representation: unsigned and signed /* 0x61 through 0x7A */ .
Recommended publications
  • Bit Shifts Bit Operations, Logical Shifts, Arithmetic Shifts, Rotate Shifts
    Why bit operations Assembly languages all provide ways to manipulate individual bits in multi-byte values Some of the coolest “tricks” in assembly rely on Bit Shifts bit operations With only a few instructions one can do a lot very quickly using judicious bit operations And you can do them in almost all high-level ICS312 programming languages! Let’s look at some of the common operations, Machine-Level and starting with shifts Systems Programming logical shifts arithmetic shifts Henri Casanova ([email protected]) rotate shifts Shift Operations Logical Shifts The simplest shifts: bits disappear at one end A shift moves the bits around in some data and zeros appear at the other A shift can be toward the left (i.e., toward the most significant bits), or toward the right (i.e., original byte 1 0 1 1 0 1 0 1 toward the least significant bits) left log. shift 0 1 1 0 1 0 1 0 left log. shift 1 1 0 1 0 1 0 0 left log. shift 1 0 1 0 1 0 0 0 There are two kinds of shifts: right log. shift 0 1 0 1 0 1 0 0 Logical Shifts right log. shift 0 0 1 0 1 0 1 0 Arithmetic Shifts right log. shift 0 0 0 1 0 1 0 1 Logical Shift Instructions Shifts and Numbers Two instructions: shl and shr The common use for shifts: quickly multiply and divide by powers of 2 One specifies by how many bits the data is shifted In decimal, for instance: multiplying 0013 by 10 amounts to doing one left shift to obtain 0130 Either by just passing a constant to the instruction multiplying by 100=102 amounts to doing two left shifts to obtain 1300 Or by using whatever
    [Show full text]
  • Using LLVM for Optimized Lightweight Binary Re-Writing at Runtime
    Using LLVM for Optimized Lightweight Binary Re-Writing at Runtime Alexis Engelke, Josef Weidendorfer Department of Informatics Technical University of Munich Munich, Germany EMail: [email protected], [email protected] Abstract—Providing new parallel programming models/ab- helpful in reducing any overhead of provided abstractions. stractions as a set of library functions has the huge advantage But with new languages, porting of existing application that it allows for an relatively easy incremental porting path for code is required, being a high burden for adoption with legacy HPC applications, in contrast to the huge effort needed when novel concepts are only provided in new programming old code bases. Therefore, to provide abstractions such as languages or language extensions. However, performance issues PGAS for legacy codes, APIs implemented as libraries are are to be expected with fine granular usage of library functions. proposed [5], [6]. Libraries have the benefit that they easily In previous work, we argued that binary rewriting can bridge can be composed and can stay small and focused. However, the gap by tightly coupling application and library functions at libraries come with the caveat that fine granular usage of runtime. We showed that runtime specialization at the binary level, starting from a compiled, generic stencil code can help library functions in inner kernels will severely limit compiler in approaching performance of manually written, statically optimizations such as vectorization and thus, may heavily compiled version. reduce performance. In this paper, we analyze the benefits of post-processing the To this end, in previous work [7], we proposed a technique re-written binary code using standard compiler optimizations for lightweight code generation by re-combining existing as provided by LLVM.
    [Show full text]
  • Relational Representation of the LLVM Intermediate Language
    NATIONAL AND KAPODISTRIAN UNIVERSITY OF ATHENS SCHOOL OF SCIENCE DEPARTMENT OF INFORMATICS AND TELECOMMUNICATIONS UNDERGRADUATE STUDIES UNDERGRADUATE THESIS Relational Representation of the LLVM Intermediate Language Eirini I. Psallida Supervisors: Yannis Smaragdakis, Associate Professor NKUA Georgios Balatsouras, PhD Student NKUA ATHENS JANUARY 2014 ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΠΡΟΠΤΥΧΙΑΚΕΣ ΣΠΟΥΔΕΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Σχεσιακή Αναπαράσταση της Ενδιάμεσης Γλώσσας του LLVM Ειρήνη Ι. Ψαλλίδα Επιβλέποντες: Γιάννης Σμαραγδάκης, Αναπληρωτής Καθηγητής ΕΚΠΑ Γεώργιος Μπαλατσούρας, Διδακτορικός φοιτητής ΕΚΠΑ ΑΘΗΝΑ ΙΑΝΟΥΑΡΙΟΣ 2014 UNDERGRADUATE THESIS Relational Representation of the LLVM Intermediate Language Eirini I. Psallida R.N.: 1115200700272 Supervisor: Yannis Smaragdakis, Associate Professor NKUA Georgios Balatsouras, PhD Student NKUA ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Σχεσιακή Αναπαράσταση της ενδιάμεσης γλώσσας του LLVM Ειρήνη Ι. Ψαλλίδα Α.Μ.: 1115200700272 Επιβλέπων: Γιάννης Σμαραγδάκης, Αναπληρωτής Καθηγητής ΕΚΠΑ Γεώργιος Μπαλατσούρας, Διδακτορικός φοιτητής ΕΚΠΑ ΠΕΡΙΛΗΨΗ Περιγράφουμε τη σχεσιακή αναπαράσταση της ενδιάμεσης γλώσσας του LLVM, γνωστή ως LLVM IR. Η υλοποίηση μας παράγει σχέσεις από ένα πρόγραμμα εισόδου σε ενδιάμεση μορφή LLVM. Κάθε σχέση αποθηκεύεται σαν πίνακας βάσης δεδομένων σε ένα περιβάλλον εργασίας Datalog. Αναπαριστούμε το σύστημα τύπων καθώς και το σύνολο εντολών της γλώσσας του LLVM. Υποστηρίζουμε επίσης τους περιορισμούς της γλώσσας προσδιορίζοντάς τους με χρήση της προγραμματιστικής γλώσσας Datalog. ΘΕΜΑΤΙΚΗ ΠΕΡΙΟΧΗ: Μεταγλωτιστές, Γλώσσες Προγραμματισμού ΛΕΞΕΙΣ ΚΛΕΙΔΙΑ: σχεσιακή αναπαράσταση, ενδιάμεση αναπαράσταση, σύστημα τύπων, σύνολο εντολών, LLVM, Datalog ABSTRACT We describe the relational representation of the LLVM intermediate language, known as the LLVM IR. Our implementation produces the relation contents of an input program in the LLVM intermediate form. Each relation is stored as a database table into a Datalog workspace.
    [Show full text]
  • A Cross-Platform Programmer's Calculator
    – Independent Work Report Fall, 2015 – A Cross-Platform Programmer’s Calculator Brian Rosenfeld Advisor: Robert Dondero Abstract This paper details the development of the first cross-platform programmer’s calculator. As users of programmer’s calculators, we wanted to address limitations of existing, platform-specific options in order to make a new, better calculator for us and others. And rather than develop for only one- platform, we wanted to make an application that could run on multiple ones, maximizing its reach and utility. From the start, we emphasized software-engineering and human-computer-interaction best practices, prioritizing portability, robustness, and usability. In this paper, we explain the decision to build a Google Chrome Application and illustrate how using the developer-preview Chrome Apps for Mobile Toolchain enabled us to build an application that could also run as native iOS and Android applications [18]. We discuss how we achieved support of signed and unsigned 8, 16, 32, and 64-bit integral types in JavaScript, a language with only one numerical type [15], and we demonstrate how we adapted the user interface for different devices. Lastly, we describe our usability testing and explain how we addressed learnability concerns in a second version. The end result is a user-friendly and versatile calculator that offers value to programmers, students, and educators alike. 1. Introduction This project originated from a conversation with Dr. Dondero in which I expressed an interest in software engineering, and he mentioned a need for a good programmer’s calculator. Dr. Dondero uses a programmer’s calculator while teaching Introduction to Programming Systems at Princeton (COS 217), and he had found that the pre-installed Mac OS X calculator did not handle all of his use cases.
    [Show full text]
  • Moscow ML Library Documentation
    Moscow ML Library Documentation Version 2.00 of June 2000 Sergei Romanenko, Russian Academy of Sciences, Moscow, Russia Claudio Russo, Cambridge University, Cambridge, United Kingdom Peter Sestoft, Royal Veterinary and Agricultural University, Copenhagen, Denmark This document This manual describes the Moscow ML library, which includes parts of the SML Basis Library and several extensions. The manual has been generated automatically from the commented signature files. Alternative formats of this document Hypertext on the World-Wide Web The manual is available at http://www.dina.kvl.dk/~sestoft/mosmllib/ for online browsing. Hypertext in the Moscow ML distribution The manual is available for offline browsing at mosml/doc/mosmllib/index.html in the distribution. On-line help in the Moscow ML interactive system The manual is available also in interactive mosml sessions. Type help "lib"; for an overview of built-in function libraries. Type help "fromstring"; for help on a particular identifier, such as fromString. This will produce a menu of all library structures which contain the identifier fromstring (disregarding the lowercase/uppercase distinction): -------------------------------- | 1 | val Bool.fromString | | 2 | val Char.fromString | | 3 | val Date.fromString | | 4 | val Int.fromString | | 5 | val Path.fromString | | 6 | val Real.fromString | | 7 | val String.fromString | | 8 | val Time.fromString | | 9 | val Word.fromString | | 10 | val Word8.fromString | -------------------------------- Choosing a number from this menu will invoke the
    [Show full text]
  • Bitwise Instructions
    Bitwise Instructions CSE 30: Computer Organization and Systems Programming Dept. of Computer Science and Engineering University of California, San Diego Overview vBitwise Instructions vShifts and Rotates vARM Arithmetic Datapath Logical Operators vBasic logical operators: vAND: outputs 1 only if both inputs are 1 vOR: outputs 1 if at least one input is 1 vXOR: outputs 1 if exactly one input is 1 vIn general, can define them to accept >2 inputs, but in the case of ARM assembly, both of these accept exactly 2 inputs and produce 1 output vAgain, rigid syntax, simpler hardware Logical Operators vTruth Table: standard table listing all possible combinations of inputs and resultant output for each vTruth Table for AND, OR and XOR A B A AND B A OR B A XOR B A BIC B 0 0 0 0 0 0 0 1 0 1 1 0 1 0 0 1 1 1 1 1 1 1 0 0 Uses for Logical Operators vNote that ANDing a bit with 0 produces a 0 at the output while ANDing a bit with 1 produces the original bit. vThis can be used to create a mask. vExample: 1011 0110 1010 0100 0011 1101 1001 1010 mask: 0000 0000 0000 0000 0000 1111 1111 1111 vThe result of ANDing these: 0000 0000 0000 0000 0000 1101 1001 1010 mask last 12 bits Uses for Logical Operators vSimilarly, note that ORing a bit with 1 produces a 1 at the output while ORing a bit with 0 produces the original bit. vThis can be used to force certain bits of a string to 1s.
    [Show full text]
  • Bit-Level Transformation and Optimization for Hardware
    Bit-Level Transformation and Optimization for Hardware Synthesis of Algorithmic Descriptions Jiyu Zhang*† , Zhiru Zhang+, Sheng Zhou+, Mingxing Tan*, Xianhua Liu*, Xu Cheng*, Jason Cong† *MicroProcessor Research and Development Center, Peking University, Beijing, PRC † Computer Science Department, University Of California, Los Angeles, CA 90095, USA +AutoESL Design Technologies, Los Angeles, CA 90064, USA {zhangjiyu, tanmingxing, liuxianhua, chengxu}@mprc.pku.edu.cn {zhiruz, zhousheng}@autoesl.com, [email protected] ABSTRACT and more popularity [3-6]. However, high-quality As the complexity of integrated circuit systems implementations are difficult to achieve automatically, increases, automated hardware design from higher- especially when the description of the functionality is level abstraction is becoming more and more important. written in a high-level software programming language. However, for many high-level programming languages, For bitwise computation-intensive applications, one of such as C/C++, the description of bitwise access and the main difficulties is the lack of bit-accurate computation is not as direct as hardware description descriptions in high-level software programming languages, and hardware synthesis of algorithmic languages. The wide use of bitwise operations in descriptions may generate sub-optimal implement- certain application domains calls for specific bit-level tations for bitwise computation-intensive applications. transformation and optimization to assist hardware In this paper we introduce a bit-level
    [Show full text]
  • Bitwise Operators
    Logical operations ANDORNOTXORAND,OR,NOT,XOR •Loggpical operations are the o perations that have its result as a true or false. • The logical operations can be: • Unary operations that has only one operand (NOT) • ex. NOT operand • Binary operations that has two operands (AND,OR,XOR) • ex. operand 1 AND operand 2 operand 1 OR operand 2 operand 1 XOR operand 2 1 Dr.AbuArqoub Logical operations ANDORNOTXORAND,OR,NOT,XOR • Operands of logical operations can be: - operands that have values true or false - operands that have binary digits 0 or 1. (in this case the operations called bitwise operations). • In computer programming ,a bitwise operation operates on one or two bit patterns or binary numerals at the level of their individual bits. 2 Dr.AbuArqoub Truth tables • The following tables (truth tables ) that shows the result of logical operations that operates on values true, false. x y Z=x AND y x y Z=x OR y F F F F F F F T F F T T T F F T F T T T T T T T x y Z=x XOR y x NOT X F F F F T F T T T F T F T T T F 3 Dr.AbuArqoub Bitwise Operations • In computer programming ,a bitwise operation operates on one or two bit patterns or binary numerals at the level of their individual bits. • Bitwise operators • NOT • The bitwise NOT, or complement, is an unary operation that performs logical negation on each bit, forming the ones' complement of the given binary value.
    [Show full text]
  • Bits, Bytes, and Integers Today: Bits, Bytes, and Integers
    Bits, Bytes, and Integers Today: Bits, Bytes, and Integers Representing information as bits Bit-level manipulations Integers . Representation: unsigned and signed . Conversion, casting . Expanding, truncating . Addition, negation, multiplication, shifting . Summary Representations in memory, pointers, strings 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 For example, can count in binary Base 2 Number Representation . Represent 1521310 as 111011011011012 . Represent 1.2010 as 1.0011001100110011[0011]…2 4 13 . Represent 1.5213 X 10 as 1.11011011011012 X 2 Encoding Byte Values Byte = 8 bits . Binary 000000002 to 111111112 0 0 0000 . Decimal: 010 to 25510 1 1 0001 2 2 0010 . Hexadecimal 0016 to FF16 3 3 0011 . 4 4 0100 Base 16 number representation 5 5 0101 . Use characters ‘0’ to ‘9’ and ‘A’ to ‘F’ 6 6 0110 7 7 0111 . Write FA1D37B16 in C as 8 8 1000 – 0xFA1D37B 9 9 1001 A 10 1010 – 0xfa1d37b B 11 1011 C 12 1100 D 13 1101 E 14 1110 F 15 1111 Example Data Representations C Data Type Typical 32-bit Typical 64-bit x86-64 char 1 1 1 short 2 2 2 int 4 4 4 long 4 8 8 float 4 4 4 double 8 8 8 long double − − 10/16 pointer 4 8 8 Today: Bits, Bytes, and Integers Representing information as bits Bit-level manipulations Integers .
    [Show full text]
  • Integer Arithmetic and Undefined Behavior in C Brad Karp UCL Computer Science
    Carnegie Mellon Integer Arithmetic and Undefined Behavior in C Brad Karp UCL Computer Science CS 3007 23rd January 2018 (lecture notes derived from material from Eddie Kohler, John Regehr, Phil Gibbons, Randy Bryant, and Dave O’Hallaron) 1 Carnegie Mellon Outline: Integer Arithmetic and Undefined Behavior in C ¢ C primitive data types ¢ C integer arithmetic § Unsigned and signed (two’s complement) representations § Maximum and minimum values; conversions and casts § Perils of C integer arithmetic, unsigned and especially signed ¢ Undefined behavior (UB) in C § As defined in the C99 language standard § Consequences for program behavior § Consequences for compiler and optimizer behavior § Examples § Prevalence of UB in real-world Linux application-level code ¢ Recommendations for defensive programming in C 2 Carnegie Mellon Example Data Representations C Data Type Typical 32-bit Typical 64-bit x86-64 char 1 1 1 signed short (default) 2 2 2 and int 4 4 4 unsigned variants long 4 8 8 float 4 4 4 double 8 8 8 pointer 4 8 8 3 Carnegie Mellon Portable C types with Fixed Sizes C Data Type all archs {u}int8_t 1 {u}int16_t 2 {u}int32_t 4 {u}int64_t 8 uintptr_t 4 or 8 Type definitions available in #include <stdint.h> 4 Carnegie Mellon Shift Operations ¢ Left Shift: x << y Argument x 01100010 § Shift bit-vector x left y positions << 3 00010000 – Throw away extra bits on left Log. >> 2 00011000 § Fill with 0’s on right Arith. >> 2 00011000 ¢ Right Shift: x >> y § Shift bit-vector x right y positions Argument 10100010 § Throw away extra bits on right x § Logical shift << 3 00010000 § Fill with 0’s on left Log.
    [Show full text]
  • Episode 7.03 – Coding Bitwise Operations
    Episode 7.03 – Coding Bitwise Operations Welcome to the Geek Author series on Computer Organization and Design Fundamentals. I’m David Tarnoff, and in this series, we are working our way through the topics of Computer Organization, Computer Architecture, Digital Design, and Embedded System Design. If you’re interested in the inner workings of a computer, then you’re in the right place. The only background you’ll need for this series is an understanding of integer math, and if possible, a little experience with a programming language such as Java. And one more thing. This episode has direct consequences for our code. You can find coding examples on the episode worksheet, a link to which can be found on the transcript page at intermation.com. Way back in Episode 2.2 – Unsigned Binary Conversion, we introduced three operators that allow us to manipulate integers at the bit level: the logical shift left (represented with two adjacent less-than operators, <<), the arithmetic shift right (represented with two adjacent greater-than operators, >>), and the logical shift right (represented with three adjacent greater-than operators, >>>). These special operators allow us to take all of the bits in a binary integer and move them left or right by a specified number of bit positions. The syntax of all three of these operators is to place the integer we wish to shift on the left side of the operator and the number of bits we wish to shift it by on the right side of the operator. In that episode, we introduced these operators to show how bit shifts could take the place of multiplication or division by powers of two.
    [Show full text]
  • Openvms Linker Utility Manual
    OpenVMS Linker Utility Manual Order Number: AA–PV6CD–TK April 2001 This manual describes the OpenVMS Linker utility. Revision/Update Information: This manual supersedes the OpenVMS Linker Utility Manual, Version 7.1 Software Version: OpenVMS Alpha Version 7.3 OpenVMS VAX Version 7.3 Compaq Computer Corporation Houston, Texas © 2001 Compaq Computer Corporation Compaq, VAX, VMS, and the Compaq logo Registered in U.S. Patent and Trademark Office. OpenVMS is a trademark of Compaq Information Technologies Group, L.P. in the United States and other countries. UNIX is a trademark of The Open Group. All other product names mentioned herein may be the trademarks or registered trademarks of their respective companies. Confidential computer software. Valid license from Compaq required for possession, use, or copying. Consistent with FAR 12.211 and 12.212, Commercial Computer Software, Computer Software Documentation, and Technical Data for Commercial Items are licensed to the U.S. Government under vendor’s standard commercial license. Compaq shall not be liable for technical or editorial errors or omissions contained herein. The information in this document is provided "as is" without warranty of any kind and is subject to change without notice. The warranties for Compaq products are set forth in the express limited warranty statements accompanying such products. Nothing herein should be construed as constituting an additional warranty. ZK4548 The Compaq OpenVMS documentation set is available on CD–ROM. This document was prepared using VAX DOCUMENT Version 2.1. Contents Preface ............................................................ xi Part I Linker Utility Description 1 Introduction 1.1 Overview . ................................................ 1–1 1.1.1 Linker Functions .
    [Show full text]