Różności w C++ Marek Pudełko

Podobne dokumenty
Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

MATERIAŁY DO ZAJĘĆ II

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Algorytmy i struktury danych. wykład 1

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Podstawy programowania w języku C i C++

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Języki i paradygmaty programowania

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Operatory AND, OR, NOT, XOR Opracował: Andrzej Nowak Bibliografia:

Typ użyty w deklaracji zmiennej decyduje o rodzaju informacji, a nazwa zmiennej symbolicznie opisuje wartość.

Program w C. wer. 12 z drobnymi modyfikacjami! Wojciech Myszka :59:

Język ludzki kod maszynowy

Podstawy programowania w języku C

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Kod IEEE754. IEEE754 (1985) - norma dotycząca zapisu binarnego liczb zmiennopozycyjnych (pojedynczej precyzji) Liczbę binarną o postaci

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

4 Standardy reprezentacji znaków. 5 Przechowywanie danych w pamięci. 6 Literatura

Program w C. wer. 10 z drobnymi modyfikacjami! Wojciech Myszka :28:

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Architektura Systemów Komputerowych, Wydział Informatyki, ZUT

Który ciąg instrukcji nada zmiennej n wartość równą ilości liczb w pliku binarnym skojarzonym ze strumieniem fp? Wymierz odpowiedź

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

( wykł. dr Marek Piasecki )

Język C zajęcia nr 11. Funkcje

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Wielkości liczbowe. Wykład z Podstaw Informatyki dla I roku BO. Piotr Mika

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Wielkości liczbowe. Wykład z Podstaw Informatyki. Piotr Mika

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Pracownia Komputerowa wykład IV

Architektura komputerów

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Laboratorium 1: Podstawy języka c. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Języki i metody programowania I

Podstawy programowania. Wykład Co jeszcze... Przypomnienia, uzupełnienia. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania skrót z wykładów:

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Java Podstawy. Michał Bereta

Technologie Informacyjne

ROZDZIAŁ 2. Operatory

Stan wysoki (H) i stan niski (L)

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Podstawy programowania. Wykład 2 Zmienne i obsługa wejścia/wyjścia. Krzysztof Banaś Podstawy programowania 1

1 Podstawy c++ w pigułce.

Kodowanie informacji. Kody liczbowe

Pracownia Komputerowa wykład V

KURS C/C++ WYKŁAD 7. struct Punkt { int x, y; int kolor; };

ARCHITEKRURA KOMPUTERÓW Kodowanie liczb ze znakiem

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 5 Liczby w komputerze

Programowanie obiektowe

1 Podstawy c++ w pigułce.

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Architektura systemów komputerowych Laboratorium 13 Symulator SMS32 Operacje na bitach

Kompilator języka C na procesor 8051 RC51 implementacja

Odczyt danych z klawiatury Operatory w Javie

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika:

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

2 Przygotował: mgr inż. Maciej Lasota

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Podstawy i języki programowania

Liczby rzeczywiste są reprezentowane w komputerze przez liczby zmiennopozycyjne. Liczbę k można przedstawid w postaci:

Podstawy programowania

Dr Michał Tanaś(

Spis treści JĘZYK C - OPERATORY BITOWE. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF32

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

RODZAJE INFORMACJI. Informacje analogowe. Informacje cyfrowe. U(t) U(t) Umax. Umax. R=(0,Umax) nieskończony zbiór możliwych wartości. Umax.

Typy danych. Przemysław Gawroński D-10, p lutego Wykład 1. (Wykład 1) Typy danych 25 lutego / 11

1.1. Pozycyjne systemy liczbowe

Pozycyjny system liczbowy

Wykład :37 PP2_W9

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Kodowanie liczb. Reprezentacja liczb całkowitych. Standard IEEE 754. dr inż. Jarosław Forenc

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika

dr inż. Jarosław Forenc

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Arytmetyka binarna - wykład 6

external Data Representation

Cyfrowy zapis informacji. 5 grudnia 2013 Wojciech Kucewicz 2

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

Układy arytmetyczne. Joanna Ledzińska III rok EiT AGH 2011

PODSTAWOWE ELEMENTY ASEMBLERA TRYBY ADRESOWANIA. OPERATORY ASEMBLERA

Naturalny kod binarny (NKB)

while(wyrażenie) instrukcja

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

C++ wprowadzanie zmiennych

Kod znak-moduł. Wartość liczby wynosi. Reprezentacja liczb w kodzie ZM w 8-bitowym formacie:

Podstawy i języki programowania

Programowanie strukturalne i obiektowe

Języki programowania - podstawy

Transkrypt:

Różności w C++ Marek Pudełko

Kodowanie i reprezentacja liczb 2

Kodowanie uzupełnieniowe U1 i U2 Bity liczby numerujemy od 0 do k 1 Bitom nr j, j < k 1 przyporządkowuje się wagi w j =2 j Najstarszej pozycji binarnej przyporządkowuje się wagę ujemną: w k 1 = 2 k 1 +1 w kodzie U1, w k 1 = 2 k 1 w kodzie U2. U1 U2 Zakres 2 k 1 +1 do 2 k 1 1 2 k 1 do 2 k 1 1 Zero dwa: +0 oraz 0 jedno Zmiana znaku zanegowanie wszystkich bitów zanegowanie bitów i dodanie jedynki JC2-10 3

Interpretacja graficzna 65535 0 65534 FFFF 65533 0000 FFFE FFFD 1 0001 0002 2 2 1 0 1 FFFF 3 0000 FFFE 0001 FFFD 0002 2 + 8001 7FFE 8000 7FFF 32769 32768 32767 Kod naturalny 32766 8001 8000 32767 32768 Kod U2 7FFE 7FFF 32767 32766 JC2-11 4

Szesnastobitowy przykład U1 Kod 16 bitowy U2 32 767 0 111 1111 1111 1111 32 767 32 766 0 111 1111 1111 1110 32 766......... +2 0 000 0000 0000 0010 +2 +1 0 000 0000 0000 0001 +1 +0 0 000 0000 0000 0000 0 0 1 111 1111 1111 1111 1 1 1 111 1111 1111 1110 2......... 32 766 1 000 0000 0000 0001 32 767 32 767 1 000 0000 0000 0000 32 768 JC2-12 5

Kodowanie +N Do rejestru wpisuje się liczbę naturalną o N większą. Zwykle N=2 k 1 lub N=2 k 1 1 ( k liczba bitów) N=32767 16 bitowy kod +N N=32768 32 767 0000 0000 0000 0000 32 768 32 766... 0000 0000 0000 0001... 32 767... 2 0111 1111 1111 1101 3 1 0111 1111 1111 1110 2 0 0111 1111 1111 1111 1 1 1000 0000 0000 0000 0 2... 1000 0000 0000 0001... +1... 32 767 1111 1111 1111 1110 32 766 32 768 1111 1111 1111 1111 32 767 JC2-13 6

Kod BCD i BCD+3 Cyfry liczby dziesiętnej koduje się dwójkowo na 4 bitach 0000 0001 0010 0011 0100 0101 0110 0111 BCD 0 1 2 3 4 5 6 7 BCD+3 - - - 0 1 2 3 4 1000 1001 1010 1011 1100 1101 1110 1111 BCD 8 9 - - - - - - BCD+3 5 6 7 8 9 - - - Liczba dziesiętna: 1 9 2 5 Kod BCD: 0001 1001 0010 0101 Kod BCD+3: 0100 1100 0101 1000 JC2-14 7

Typy całkowite w C++ Kod Typ danych Zakres Rozmiar unsigned char 0 255 U2 signed char 128 127 1 bajt unsigned short 0 65 535 U2 short 32 768 32 767 2 bajty unsigned (1) 0 65 535 2 bajty unsigned (2) 0 4 294 967 296 4 bajty U2 int (1) 32 768 32 767 2 bajty U2 int (2) 2 147 483 648 2 147 483 647 4 bajty unsigned long 0 4 294 967 296 4 bajty U2 long 2 147 483 648 2 147 483 647 (1) Borland C++, (2) MS Visual C++ i Java JC2-15 8

Standard IEEE 754 1 bit e bitów m bitów s E f znak wykładnik w kodzie +N ułamek (0 f <1) F wartość liczby w rejestrze F=( 1) s (1 + f)2 E gdy N < E < 2 e N 1 F=( 1) s (0 + f)2 1 N gdy E = N Uwaga: Gdy wykładnik zawiera same zera, to E= N. Gdy wykładnik zawiera same jedynki to E= 2 e N 1. JC2-16 9

Obiekty IEEE 754 Wykładnik Kod binarny s E f Obiekt E= N s 00...00 000...000 0 E= N s 00...00 000...001 ( 1) s 2 1 N m E= N s 00...00 bbb...bbb ( 1) s (0 + f)2 1 N E= N+1 s 00...01 000...000 ( 1) s 2 1 N N<E<2 e N 1 s ee...ee bbb...bbb ( 1) s (1 + f)2 E E=2 e N 2 s 11...10 111...111 ( 1) s (1 2 m 1 )2 2e N 1 E=2 e N 1 s 11...11 000...000 E=2 e N 1 s 11...11 bbb...bbb NaN ee...ee, bbb...bbb nie wszystkie bity równe zeru JC2-17 10

Formaty IEEE 754 Typ IEEE SINGLE DOUBLE DOUBLE EXT. Typ w C i C++ float double long double Liczba bajtów 4 8 10 ( 10) Liczba bitów: n 32 64 80 ( 79) Liczba bitów: m 23 52 64 ( 64) Wykładnik: e 8 11 15 ( 15) Kodowanie: N 127 1023 16383 ( 16383) Zakres wykładnika [ 126,+127] [ 1022,+1023] [ (N 1),+N] Precyzja dziesiętna 7 cyfr 15 cyfr 20 cyfr Zakres wartości ±3,4 10 38 ±1,8 10 308 ±1,19 10 4932 JC2-18 11

Przykłady 32 bitowa reprezentacja float liczby 1500,6875 1500,6875 (10) = 10111011100,1011 (2) 1 10001001 01110111001011000000000 1 E=137 127 E=10 N f=0,01110111001011 = = 0,46551513671875 F=( 1)(1+0,01110111001011) 2 10 = = 1,01110111001011 2 10 = 10111011100,1011 = = 1500,6875 Lub na liczbach dziesiętnych F =( 1)(1+0,46551513671875)2 10 = = 1,46551513671875 1024 = -1500,6875 JC2-19 12

Operatory 13

Inicjowanie tablic c.d. int L[ ][4]={{5,7,3,9},{0},{0,8}}, M[5][4]={{1},{0,2}}; 3 wiersze L M 5 7 3 9 1 0 0 0 0 0 0 0 0 2 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 JC3-3

Struktury i unie struct ST1{ short k; long L; unsigned char c[4]; }; struct ST1 A; union UN1{ short k; long L; unsigned char c[4]; }; union UN1 B; unia B k L c &A struktura A adres k L c &B adres JC3-4

Przykłady tablic struktur struct Rzym { char tekst[4]; short wartosc; }; "M" 1000 "CM" 900...... "I" 1 struct Rzym TR[ ]={{"M",1000}, {"CM",900}, {"D",500}, {"CD",400}, {"C",100}, {"XC",90}, {"L",50}, {"XL",40}, {"X",10}, {"IX",9}, {"V",5}, {"IV",4}, {"I",1}}; 31 "Styczen" struct Miesiace { 28 "Luty" short L_dni;...... char *nazwa; 31 "Grudzien" }; struct Miesiace TM[ ]={{31,"Styczen"}, {28,"Luty"}, {31,"Marzec"}, {30,"Kwiecien"}, {31,"Maj"},...... {30,"Listopad"}, {31,"Grudzien}}; JC3-5

Przykład unii struktur union REGS { struct {unsigned short ax, bx, cx, dx, si, di, cflag, flags;} x; struct {unsigned char al, ah, bl, bh, cl, ch, dl, dh; } h; }; union REGS R1; x h a x b x c x d x si di cflag flags al ah bl bh cl ch dl dh R1.x.ax = n; // niech n = 2*256 + 10 = 522 b0 = R1.h.al; // b0 = 10 (młodszy bajt n) b1 = R1.h.ah; // b1 = 2 (starszy bajt n) adres JC3-6

Zmienne wyliczeniowe enum Nazwa {wyliczenie, wyliczenie,... wyliczenie}; Wyliczenie ma postać: identyfikator identyfikator = inicjator Przykłady: enum {False, True}; // False=0, True=1 enum Boolean {False, True}; enum Boolean L1, L2; // zmienne typu Boolean enum Dni {Pn, Wt, Sr, Cz, Pt, So, Ni}; enum Fig {Kolo, Trojkat=3, Prostokat}; // Kolo = 0, Trojkat = 3, Prostokat = 4 JC3-7

Definicje identyfikatorów typów typedef double Wiersz[20], Kolumna[20], *Wskaznik; Przykłady: Wiersz A, B[5]; Kolumna C, D[8]; Wskaznik E, F[12]; double A[20], B[5][20]; double C[20], D[8][20]; double *E, *F[12]; Są dwa główne powody używania specyfikacji typedef. 1. Parametryzacja programu. 2. Poprawa czytelności programu. JC3-8

Operatory Poziom Priorytet ność Operatory języka C i C++ Operatory C++ Kwalifikatory 0 L :: Klasa:: Specjalne 1 L [ ]. > ( ) ++ Typ( ) 1-argumentowe 2 P + ++! ~ * & (Typ) sizeof new delete Komponenty 3 L.* >* Arytme- 4 L * / % tyczne 5 L + Przesuwanie 6 L << >> Porównania 7 L < <= > >= Przyrównania 8 L = =!= 9 L & Bitowe 10 L ^ 11 L Logiczne 12 L && 13 L Wyboru 14 P? : Przypisania 15 P = *= /= %= += = <<= >>= &= ^= = Połączenia 16 L, JC3-9

Operatory inkrementacji ++ Są 2 operatory: następnikowy (k++) i poprzednikowy (++k). Oba zwiększają argument o 1, ale wyniki dają różne!!! int i, k=3; double A[10]={0}; // 10 elementów wyzerowanych A[k++]=5; // (początkowe k=3, zatem) A[3]=1, k=4 A[++k]=8; // (końcowe k=5, zatem) A[5]=8, k=5 k=0; for(i=0; i<10; i++) A[i]=k++; // A[0]=0, A[1]=1, A[2]=2, A[3]=3,..., A[9]=9 k=0; for(i=0; i<10; i++) A[i]=++k; // A[0]=1, A[1]=2, A[2]=3, A[3]=4,..., A[9]=10 JC3-10

Rzutowanie typu int k=11, n=4; double x, y; x = k /n; // x=2.0, bo wykonano dzielenie całkowite x = (double)k/n; // x=2.75, bo (double)k=11.0 void *p; p=&x; y=*(double*)p; p=&k; y=*(int*)p; // p nie wskazuje na double // y=x; // p nie wskazuje na int // y=k; JC3-11

Operator sizeof double x, Y[50], A[40][8], B[]={5,7,2,4,1,0,7,6,3,2,9,8,6,4}; double *p, (*R)[4]; const int n=sizeof(b)/sizeof(b[0]); // Rozmiar tablicy B int K[n], M[sizeof(B)/sizeof(B[0])]; // Tablice K i M mają taki sam rozmiar jak tablica B Prawdziwe sa następujące równości: sizeof(x) == sizeof(double) // rozmiar zmiennej x sizeof(y[0]) == sizeof(double) // rozmiar zmiennej Y[0] sizeof(y) == 50*sizeof(double) // rozmiar tablicy Y sizeof(a) == 40*8*sizeof(double) // rozmiar tablicy A sizeof(a[0]) == 8*sizeof(double) // rozmiar wiersza sizeof(*p) == sizeof(double) // rozmiar zmiennej *p sizeof(r) == sizeof(void*) // rozmiar wskaźnika sizeof(*r) == 4*sizeof(double) // rozmiar tablicy JC3-12

Przesunięcia bitowe << >> int k = 0x335F; 00110011 01011111 k = 13 151 k = k<<3; 10011010 11111000 k = 25 864 k = k>>3; albo 00010011 01011111 11110011 01011111 (?) k = 4 959 (?) k = 3 233 unsigned n=13151 00110011 01011111 n = 13 151 n = n<<3; 10011010 11111000 n = 39 672 n = n>>3 00010011 01011111 n = 4 959 n = (n>>3)<<3 00110011 01011000 n = 13 144 n = 3<<4 00000000 00110000 n = 3*2 4 n = 13151>>4 00000011 00110101 n = 13151/2 4 JC3-13

Porównania i przyrównania Porównania: < <= > >= ( < > ) Przyrównania: = =!= ( = ) x Przykłady: 0 y 1 gdy relacja gdy relacja jest fałszywa, jest prawdziwa Wyrażenie Wynik Uwagi 3.1 < 3 0 Fałsz 5 = = 5 1 Prawda 5 = = 5 = = 5 0 (5 = = 5) = = 5 czyli 1 = = 5 6 > 4 > 2 0 (6 > 4) > 2 czyli 1 > 2 1 = = 5 > 3 1 1 = = (5 > 3) czyli 1 = = 1 JC3-14

Bitowe: and, ex-or, or A B A & B A ^ B A B 0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 0 1 Przykłady: j = 01000011 11000011 = 0x43C3 = 17 347 k = 00000010 01110110 = 0x0276 = 630 j & k = 00000010 01000010 = 0x0242 = 578 j ^ k = 01000001 10110101 = 0x41B5 = 16 821 j k = 01000011 11110111 = 0x43F7 = 17 399 k & 1<<n - testuje n-ty bit w słowie k k ^ 1<<n - daje wartość k z zanegowanym n-tym bitem k & ~(1<<n) - daje wartość k z wyzerowanym n-tym bitem JC3-15

Logiczne: and, or x && y 0 1 gdy gdy x x 0 lub 0 i y y 0, 0. x y 0 1 gdy gdy x x 0 i 0 lub y y 0, 0. Najpierw opracowywany jest lewy argument. Prawy argument opracowuje się tylko wtedy, gdy od niego zależy wynik operacji. Np. w wyrażeniu fp && fscanf(fp, "%d", &n) funkcja fscanf jest wywoływana tylko wtedy, gdy fp 0 (jeśli fp = 0, to wynikiem operatora && jest tu 0). JC3-16

Operator warunkowy Wyrażenie1? Wyrażenie2 : Wyrażenie3; 0 Wyrażenie1 =0 Wyrażenie2 Wyrażenie3 Przykłady: MaxXY = x > y? x : y; Srednia = n > 1? S/n : S; Max3 = x > y? (z > x? z : x) : (z > y? z : y); *(x < y? &x : &y) = 0; // Zeruje zmienną o mniejszej wartości JC3-17

Operatory przypisania A = Wyrażenie; // Wynik = (typ A)Wyrażenie A @= Wyrażenie; // A=(A)@(Wyrażenie) // gdzie @= * / % + << >> & ^ Przykłady: x = k = y = 3.9; // y = 3,9; k = 3; x = 3,0; k = 3,9 x = 3 3,0 x *= n +1; // x = x*(n +1); k ^= 1 << n; // negowanie n tego bitu w słowie k k = 1 << n; // ustawienie n tego bitu w słowie k k &= ~(1 << n); // zerowanie n tego bitu w słowie k JC3-18

Operator połączenia Wyrażenie1, Wyrażenie2 Wykonuje się Wyrażenie1 i potem Wyrażenie2. Wynikiem jest wartość Wyrażenia2. Przykłady: k = (n = 0, n = 6, 1); // k = 1 x = A[i, j]; // x = A[ j] for(max =A[0], i =1 ; i <n ; i + +) if(a[i]> max) max =A[i]; for(i = 0, j = n 1 ; i <j ; i + +, j ) z =A[i], A[i] =A[j], A[j] = z; JC3-19

31

32