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

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

Operatory w C++ Operatory arytmetyczne. Operatory relacyjne (porównania) Operatory logiczne. + dodawanie - odejmowanie * mnożenie / dzielenie % modulo

Podstawy programowania w języku C i C++

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

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

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

Języki i paradygmaty programowania

2 Przygotował: mgr inż. Maciej Lasota

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 4. Karol Tarnowski A-1 p.

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

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

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

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

Język C zajęcia nr 11. Funkcje

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

Podstawy i języki programowania

Instrukcje sterujące. Programowanie Proceduralne 1

Odczyt danych z klawiatury Operatory w Javie

( wykł. dr Marek Piasecki )

Języki i metody programowania I

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

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

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

Słowa kluczowe i nazwy

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

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Wyrażenia arytmetyczne

operator zmiany znaku operatory mnożenia, dzielenia, dzielenia modulo operatory dodawania, odejmowania

ROZDZIAŁ 2. Operatory

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Stuck in the loop. Sterowanie. Marcin Makowski. 29 października Zak lad Chemii Teoretycznej UJ

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Programowanie w języku C++

MATERIAŁY DO ZAJĘĆ II

Wstęp do informatyki- wykład 5 Instrukcja selekcji if-else Operatory arytmetyczne i logiczne

Arytmetyka liczb binarnych

Wstęp do wskaźników w języku ANSI C

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

dr inż. Jarosław Forenc

Zmienne, stałe i operatory

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

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Stałe definiuje się używając funkcji define. Przykład: define( PODATEK, 22); define( INSTALACJAOS, 70); define( MS, Microsoft );

Lab 9 Podstawy Programowania

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

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Podstawy programowania C. dr. Krystyna Łapin

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

Część 4 życie programu

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Podstawy programowania w języku C

Programowanie Komputerów

KURS C/C++ WYKŁAD 6. Wskaźniki

nowe operatory &. (kropka) * operator rzutowy ->, (przecinek) sizeof

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

Programowanie strukturalne. dr inż. Tadeusz Jeleniewski

Wstęp do programowania

Mikrooperacje. Mikrooperacje arytmetyczne

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

C++ wprowadzanie zmiennych

if (warunek) instrukcja1; if (warunek) instrukcja1; else instrukcja2; a > b - a większe od b if (warunek) instrukcja1; a <= b - a mniejsze lub równe b

Powtórka algorytmów. Wprowadzenie do języka Java.

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

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

1. Operacje logiczne A B A OR B

Programowanie w elektronice: Podstawy C

Przeciążanie operatorów

Materiały pomocnicze do wykładu 3 - Elementy języka Java

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

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

I - Microsoft Visual Studio C++

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

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Programowanie strukturalne i obiektowe

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

Zaawansowane programowanie w języku C++ Przeciążanie operatorów

Języki i metodyka programowania. Wskaźniki i tablice.

Wykład 2 Składnia języka C# (cz. 1)

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Wstęp do informatyki- wykład 5 Instrukcja selekcji if-else Operatory arytmetyczne i logiczne Wyrażenie warunkowe operator selekcji Instrukcja switch

Operatory cd. Relacyjne: ==!= < > <= >= bool b; int i =10, j =20; dzielenie całkowitych wynik jest całkowity! Łączenie tekstu: + string s = "Ala ma ";

Wstęp do Programowania Lista 1

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Operatory. Dorota Pylak

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

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

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.

Podstawy programowania w języku C++

Wskaźniki w C. Anna Gogolińska

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Opisy funkcji /html_node/libc_528.html

Wstęp do informatyki- wykład 2

Wstęp do Informatyki i Programowania (kierunek matematyka stosowana)

Spis treści JĘZYK C - INSTRUKCJA SWITCH, OPERATORY BITOWE. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF05

Transkrypt:

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

Przypomnienie: operatory Operator przypisania = przypisanie x = y x y Operatory arytmetyczne * mnożenie x * y x y x / dzielenie x / y y + dodawanie x + y x + y - odejmowanie x - y x y % reszta z dzielenia (modulo) x % y x mod 2 ++ inkrementacja x++ x x + 1 -- dekrementacja x-- x x 1 Operatory relacji < mniejszy niż x < y x < y > większy niż x > y x > y <= mniejszy lub równy x <= y x y >= większy lub równy x >= y x y == równy x == y x = y!= różny x!= y x y Operatory logiczne! negacja (NOT)!x x && koniunkcja (AND) x>1 && y<2 x > 1 y < 2 alternatywa (OR) x<1 y>2 x < 1 y > 2 Operatory wskaźnikowe & referenacja (pobranie adresu) &x * dereferencja (dostęp pod adres) *x Programowanie Proceduralne 2

Operatory bitowe operator znaczenie przykład ~ negacja bitowa (NOT) ~x & koniunkcja bitowa (AND) x & y alternatywa bitowa (OR) x y ^ alternatywa rozłączna (XOR) x ^ y działają na pojedynczych bitach zdefiniowane dla liczb całkowitych najbezpieczniej używać wyłącznie dla liczb całkowitych bez znaku (unsigned) Programowanie Proceduralne 3

Negacja Koniunkcja (AND) ~ 0 1 1 0 Alternatywa (OR) 0 1 0 0 1 1 1 1 & 0 1 0 0 0 1 0 1 Alternatywa rozłączna (XOR) ^ 0 1 0 0 1 1 1 0 Programowanie Proceduralne 4

1 # include <s t d i o. h> 2 3 int main ( ) 4 { 5 unsigned int a = 9 ; 6 unsigned int b = 1 2 ; 7 8 printf ( "a = %u\nb = %u\n", a, b ) ; 9 printf ( "~a = %u\n~b = %u\n", a, b ) ; 10 printf ( "a & b = %u\n", a & b ) ; 11 printf ( "a b = %u\n", a b ) ; 12 printf ( "a ^ b = %u\n", a ˆ b ) ; 13 14 return 0 ; 15 } Przykład a = 9 b = 12 ~a = 4294967286 ~b = 4294967283 a & b = 8 a b = 13 a ^ b = 5 bitowe1.c Programowanie Proceduralne 5

Przykład a 9 00000000000000000000000000001001 ~a 4294967286 11111111111111111111111111110110 a 9 00000000000000000000000000001001 b 12 00000000000000000000000000001100 a & b 8 00000000000000000000000000001000 a 9 00000000000000000000000000001001 b 12 00000000000000000000000000001100 a b 13 00000000000000000000000000001101 a 9 00000000000000000000000000001001 b 12 00000000000000000000000000001100 a ^ b 5 00000000000000000000000000000101 Programowanie Proceduralne 6

Przesunięcie bitowe operator znaczenie przykład << przesunięcie bitowe w lewo x << y >> przesunięcie bitowe w prawo x >> y pozycje wszystkich bitów są przesuwane bity skrajne są tracone, puste miejsca są zastępowane zerami odpowiada do mnożeniu/dzieleniu całkowitemu przez 2 Programowanie Proceduralne 7

Przykład 1 # include <s t d i o. h> 2 3 int main ( ) 4 { 5 unsigned int a = 5 ; 6 7 printf ( "a = %u\n", a ) ; 8 printf ( "a << 1 = %u\n", a << 1) ; 9 printf ( "a << 2 = %u\n", a << 2) ; 10 printf ( "a >> 1 = %u\n", a >> 1) ; 11 printf ( "a >> 2 = %u\n", a >> 2) ; 12 13 return 0 ; 14 } a = 5 a << 1 = 10 a << 2 = 20 a >> 1 = 2 a >> 2 = 1 bitowe2.c Programowanie Proceduralne 8

Przykład a = 5 00000000000000000000000000000101 a << 1 = 10 00000000000000000000000000001010 a << 2 = 20 00000000000000000000000000010100 a = 5 00000000000000000000000000000101 a >> 1 = 2 00000000000000000000000000000010 a >> 2 = 1 00000000000000000000000000000001 Programowanie Proceduralne 9

Rzutowanie: konwersja wartości z jednego typu na inny typ niejawne, dokonywane automatycznie int a = 3. 1 4 ; float x = a ; jawne, wykonane przy pomocy operatora rzutowania () (typ )wartość int a = ( int ) 3. 1 4 ; float b = 3/( float ) 2 ; char w = ( char ) malloc ( 1 0 ) ; Rzutowanie Przy rzutowaniu z typu bardziej pojemnego do mniej pojemnego możliwa utrata dokładności (nadmiar, overflow), taka sytuacja nie jest (zazwyczaj) sygnalizowana Programowanie Proceduralne 10

Operatory podstawienia Skrócony zapis operacji podstawienia: a = a b a = b a += b a = a + b a = b a = a b a -= b a = a - b a &= b a = a & b a *= b a = a * b a ^= b a = a ^ b a /= b a = a / b a <<= b a = a << b a %= b a = a % b a >>= b a = a >> b Uwaga na kolejność, zamiana nie zawsze powoduje błąd: a =b ; / OK / a = b ; / czy poprwanie? / Programowanie Proceduralne 11

Inkrementacja i dekrementacja Jednoargumentowy operator inkrmentacji ++ i operator dekrementacji -- ++a a++ --a a-- pre-inkrementacja, to samo co a=a+1 post-inkrementacja pre-inkrementacja,, to samo co a=a-1 post-inkrementacja Operator post-inkrementacji i post-dekrementacji zwracają wartość poprzednią (przed zwiększeniem/zmniejszeniem). Zmiana wartości argumentu odbywa się później (po wyliczeniu całego wyrażenia). Programowanie Proceduralne 12

Przykład 1 # include <s t d i o. h> 2 3 int main ( ) 4 { 5 int a = 1 ; 6 int b ; 7 8 b = ++a ; 9 printf ( "a=%d, b=%d\n", a, b ) ; 10 11 b = a++; 12 printf ( "a=%d, b=%d\n", a, b ) ; 13 14 b = a ; 15 printf ( "a=%d, b=%d\n", a, b ) ; 16 17 b = a ; 18 printf ( "a=%d, b=%d\n", a, b ) ; 19 20 return 0 ; 21 } inkrementacja.c Programowanie Proceduralne 13

Przykład 1 # include <s t d i o. h> 2 3 int main ( ) 4 { 5 int a = 1 ; 6 int b ; 7 8 b = ++a ; 9 printf ( "a=%d, b=%d\n", a, b ) ; 10 11 b = a++; 12 printf ( "a=%d, b=%d\n", a, b ) ; 13 14 b = a ; 15 printf ( "a=%d, b=%d\n", a, b ) ; 16 17 b = a ; 18 printf ( "a=%d, b=%d\n", a, b ) ; 19 20 return 0 ; 21 } a=2, b=2 a=3, b=2 a=2, b=2 a=1, b=2 inkrementacja.c Programowanie Proceduralne 14

Kopiowanie napisu z tablicy a do b void strcpy ( char a, char b ) { while ( a!= \0 ) { b = a ; a = a + 1 ; b = a + 1 ; } b = \0 ; } Dokładnie to samo void strcpy ( char a, char b ) { while ( b++ = a++); } Przykład: kopiowanie napisu Programowanie Proceduralne 15

Operator wyrażenia warunkowego Operator warunkowy?: wyrażenie? wartość 1 : wartość 2 jeżeli wyrażenie jest prawdą to wynikiem jest wartość 1, w przeciwnym wypadku wynikiem jest wartość 2 jedyny operator trzyargumentowy Przykład Wyznaczanie większej wartości z 2 liczb: a = ( b>c )? b : c ; Wartość absolutna: a = ( a<0)? a : a ; Programowanie Proceduralne 16

Inne operatory przecinek, wyrażenie rozdzielone przecinkiem wykonywane są od lewej do prawej. Wynikiem jest ostatnia instrukcja. a = 1, b = 2, c = 3 ; dostęp do elementów tablicy [] a = t [ i +1]; wywołanie funkcji () grupowanie wyrażeń () a = ( b + c ) / ( b c ) ; dostęp do pól struktur. (kropka) i -> a = student. nazwisko ; b = wskaznik >nazwisko Programowanie Proceduralne 17

Priorytety i kolejność operatorów Priorytet operatora decyduje o kolejności wykonywania operacji, np. mnożenie przed dodawaniem. a = 3 ; x = a + a a ; Łączność operatora (lewostronna lub prawostronna) decyduje o kolejności wykonywania obliczeń dla operatorów o takim samym priorytecie a = 1 ; x = a a a ; Programowanie Proceduralne 18

priorytet Operator () wywołanie funkcji []. -> () przyrostkowe ++ -- Łączność lewostronna jednoargumentowe przedrostkowe! ~ + - * & sizeof() ++ -- () prawostronna * / % rzutowanie lewostronna + - lewostronna << >> lewostronna <<= >>= lewostronna ==!= lewostronna & lewostronna ^ lewostronna lewostronna && lewostronna lewostronna?: prawosronna = += -= *= /= %= &= = ^= prawostronna, lewostronna Programowanie Proceduralne 19

Przykład int a, b=1, c=2; a = b++ + ++c << 3 / 2 ( int ) 2. 5 ; printf ( "a=%d, b=%d, c=%d\n", a, b, c ) ; Jaki będzie wynik? Programowanie Proceduralne 20

Przykład int a, b=1, c=2; a = b++ + ++c << 3 / 2 ( int ) 2. 5 ; printf ( "a=%d, b=%d, c=%d\n", a, b, c ) ; Jaki będzie wynik? a=8, b=2, c=3 Programowanie Proceduralne 21

Przykład 1 b++ zwiększa wartość b na 2 ale zwraca 1 a = -1 + ++c << 3 / 2 * (int)2.5 ; 2 ++c zwiększa wartość c na 3, rzutowanie (int)2.5 daje 2 a = -1 + 3 << 3 / 2 * 2 ; 3 dzielenie 3/2 zwraca 1, które następnie jest mnożone przez 2 (łączność lewostronna) a = -1 + 3 << 2 ; 4 a = 2 << 2 ; 5 a = 8 ; W razie wątpliwości co do kolejności obliczeń używaj nawiasów grupujących (mają najwyższy priorytet) Programowanie Proceduralne 22

Literatura dodatkowa Stephan Brumme, the bit twiddler, http://bits.stephan-brumme.com/ Alex Aliain, Bitwise Operators in C and C++: A Tutorial, http://www.cprogramming.com/tutorial/bitwise_ operators.html Programowanie Proceduralne 23